失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python匿名函数调用_python中引用局部变量的匿名函数

python匿名函数调用_python中引用局部变量的匿名函数

时间:2023-12-01 16:32:52

相关推荐

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中引用局部变量的匿名函数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。