用python编写函数

用python编写函数,第1张

用python编写函数

它不起作用,因为您在循环中创建的所有匿名函数都引用相同的循环变量,因此共享其最终值。

作为快速解决方案,您可以将分配替换为:

final = lambda x, f=f, final=final: f(final(x))

或者,您可以从函数返回lambda:

def wrap(accum, f):    return lambda x: f(accum(x))...final = wrap(final, f)

要了解发生了什么,请尝试以下实验:

>>> l = [lambda: n for n in xrange(10)]>>> [f() for f in l][9, 9, 9, 9, 9, 9, 9, 9, 9, 9]

这个结果使许多人感到惊讶,他们期望结果会如此

[0, 1, 2,...]
。但是,所有的lambda都指向相同的
n
变量,并且都指向其最终值9。在您的情况下,
final
应该嵌套的所有版本最终都指向相同的
f
,甚至更糟的是,指向相同的变量。
final



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4905451.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存