列表推導式與lambda的結合
阿新 • • 發佈:2019-01-03
def fun():
# return (lambda x: x * i for i in range(4)) # 結果是[0,2,4,6]
return [lambda x: x * i for i in range(4)]
預期結果應該是[0,2,4,6],但確是[6, 6, 6, 6]
print([m(2) for m in fun()])
-----------------------------------------------------------------------------------------------------
可以把上述 匿名函式+列表推導式 轉換為下種格式,生成了4次6
li = []
return li
for fun in funcs():
print(fun(2))
funcs函式裡面形成了一個閉包
閉包的兩個特性:
①、內部函式使用外部函式的變數(不對外部函式的變數進行重新賦值)
②、外部函式 return 內部函式的函式名(其實是返回內部函式的記憶體地址)
# return (lambda x: x * i for i in range(4)) # 結果是[0,2,4,6]
return [lambda x: x * i for i in range(4)]
預期結果應該是[0,2,4,6],但確是[6, 6, 6, 6]
print([m(2) for m in fun()])
-----------------------------------------------------------------------------------------------------
可以把上述 匿名函式+列表推導式 轉換為下種格式,生成了4次6
li = []
def funcs():
for i in range(4):
def func(x):return x * i
li.append(func)return li
for fun in funcs():
print(fun(2))
funcs函式裡面形成了一個閉包
閉包的兩個特性:
①、內部函式使用外部函式的變數(不對外部函式的變數進行重新賦值)
②、外部函式 return 內部函式的函式名(其實是返回內部函式的記憶體地址)