python匿名函数调用_python中引用局部变量的匿名函数
from functools import partial
i = 0
f0 = partial(callback, i)
i = 1
f1 = partial(callback, i)
f0()
# 0
f1()
# 1
{cdda>在這個(gè)時(shí)刻,就像是一個(gè)的值。當(dāng)它被調(diào)用時(shí)不評(píng)估它。在
僅包裝部分參數(shù)
Yes partial將允許您包裝任意數(shù)量的參數(shù),剩余的arg和kwarg可以傳遞給結(jié)果partial對(duì)象,這樣它的行為就像調(diào)用原始包裝函數(shù)一樣。。。在
^{2}$
實(shí)際上,您已經(jīng)將callback(val1, val2)包裝成callback(val2),其中val1已經(jīng)作為閉包包含。在
使用lambda
如果您真的想知道如何使用lambda閉包來實(shí)現(xiàn)這個(gè)目的,那么您可以看到為什么它變得難看并且更傾向于使用部分閉包。。。在f0 = (lambda val1: lambda val2: callback(val1, val2))(i)
必須將scope變量包裝到外部函數(shù)作用域中,然后在內(nèi)部lambda函數(shù)中引用該范圍。大笑。在
異常的回溯:部分函數(shù)與lambda函數(shù)與嵌套函數(shù)
內(nèi)因與外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因外因。請(qǐng)記住,我指的是函數(shù)閉包。functools.partial修復(fù)了當(dāng)包裝函數(shù)引發(fā)異常時(shí)將得到的回溯。。。在
考慮一下這個(gè)版本,它將除法提高到零:def callback(val1, val2):
return val1 / val2
正常外部/內(nèi)部關(guān)閉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
現(xiàn)在是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
總結(jié)
以上是生活随笔為你收集整理的python匿名函数调用_python中引用局部变量的匿名函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堆之二项堆(Binominal Heap
- 下一篇: ACM学习资料整理