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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值