# 互相巢狀的函式,如果內函式使用了外函式的區域性變數,並且外函式把內函式返回出來的過程,叫做閉包;裡面的內函式就是閉包函式。# 基本語法
def func():
name = "bajie"
def inner():
print(name)
return inner
res = func()
res()
# 複雜版本
def func():
money = 1000
def outer():
nonlocal money
money -= 300
print(money)
def inner():
nonlocal money
money -= 500
print(money)
def going():
return (outer,inner)
return going
# 第一次執行函式
going_func = func()
res = going_func() # 拿到going_func的返回值 (outer,inner)
res[0]() # 執行outer money == 700
res[1]() # 執行inner money == 200
res[0]() # 再次執行outer money == -100
res[1]() # 再次執行inner money == -600
# 第二次執行函式( 函式名().__closure__ , cell_contents )
# 獲取閉包函式的使用變數
res1 = func().__closure__ # 如果是閉包,拿到 閉包函式 going 的返回值
# 用來獲取單元格物件當中的閉包函式
res1[0].cell_contents() # money == 500
# 內函式使用了外函式的區域性變數,該變數與閉包函式發生繫結,延長了該變數的生命週期# 閉包的意義:閉包可以優先使用外函式中的變數,並對閉包中的值起到了封裝保護的作用.外部無法訪問
# 示例一
def func():
num = 0
def inner():
nonlocal num
num += 1
return print(num)
return [inner(),inner(),inner(),inner()]
res = func()
# 示例二
def func():
num = 0
def inner():
nonlocal num
num += 1
return print(num)
return inner
res = func()
res()
res()
res()
res()
# 格式 ---> 真值 if 條件 else 假值# 示例一
num = 10
if num > 0 :
print("true")
else:
print("false")
# 三元運算表示式
num = 10
print("true" if num > 0 else "false" )
# 格式 ---> lambda 引數 : 返回值# 示例一
def func(n):
return type(n)
print(func(10))
# lambda 表示式
print(lambda n : type(n))
# 示例一def func(n):
if n % 2 == 0:
return "偶數"
else:
return "奇數"
示例二
print(lambda n : "偶數" if n % 2 == 0 else "奇數")
python匿名函式和閉包函式
一 匿名函式 在定義函式的時候,不想給函式起乙個名字。這個時候就可以用lambda來定義乙個匿名函式。語法 變數名 lambda 引數 表示式 引數 可選,通常以逗號分隔 表示式 不能包含迴圈 return,但是可以包含if.else.返回值就是該表示式的結果。如 建立乙個帶引數的匿名函式 add ...
javascipt之匿名函式和閉包
匿名函式的幾種形式 function function box 表示執行函式,並且傳參 var box function alert box 呼叫方式和函式呼叫相似 function box alert box 呼叫匿名函式當在乙個函式中定義另乙個函式時,就會產生閉包。內層函式和外層函式所包含的區域...
Go The Way 之 匿名函式和閉包
package main import fmt 匿名函式和閉包函式 func main 要說閉包,首先需要說匿名函式。匿名函式顧名思義就是把函式名稱給隱藏了 不要了,只有函式的關鍵字,引數列表 返回值列表和實現 func nimingtest a,b int int return sum a,b 簡...