python匿名函数调用_python中引用局部变量的匿名函数
from functools import partial
i = 0
f0 = partial(callback, i)
i = 1
f1 = partial(callback, i)
f0()
# 0
f1()
# 1
{cdda>在這個時刻,就像是一個的值。當它被調用時不評估它。在
僅包裝部分參數
Yes partial將允許您包裝任意數量的參數,剩余的arg和kwarg可以傳遞給結果partial對象,這樣它的行為就像調用原始包裝函數一樣。。。在
^{2}$
實際上,您已經將callback(val1, val2)包裝成callback(val2),其中val1已經作為閉包包含。在
使用lambda
如果您真的想知道如何使用lambda閉包來實現這個目的,那么您可以看到為什么它變得難看并且更傾向于使用部分閉包。。。在f0 = (lambda val1: lambda val2: callback(val1, val2))(i)
必須將scope變量包裝到外部函數作用域中,然后在內部lambda函數中引用該范圍。大笑。在
異常的回溯:部分函數與lambda函數與嵌套函數
內因與外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因。請記住,我指的是函數閉包。functools.partial修復了當包裝函數引發異常時將得到的回溯。。。在
考慮一下這個版本,它將除法提高到零:def callback(val1, val2):
return val1 / val2
正常外部/內部關閉def wrapper(fn, val1):
def wrapped(val2):
return fn(val1, val2)
return wrapped
f0 = wrapper(callback, i)
f0(0)
Traceback (most recent call last):
File "", line 1, in
File "", line 3, in wrapped
File "", line 2, in callback
ZeroDivisionError: integer division or modulo by zero
lambda閉包f0 = (lambda val1: lambda val2: callback(val1, val2))(i)
f0(0)
Traceback (most recent call last):
File "", line 1, in
File "", line 1, in
File "", line 2, in callback
ZeroDivisionError: integer division or modulo by zero
現在是functools.partialf0 = partial(callback, i)
f0(0)
Traceback (most recent call last):
File "", line 1, in
File "", line 2, in callback
ZeroDivisionError: integer division or modulo by zero
總結
以上是生活随笔為你收集整理的python匿名函数调用_python中引用局部变量的匿名函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堆之二项堆(Binominal Heap
- 下一篇: 11届蓝桥杯青少年组C++全国赛高级组