您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

用python编写函数

用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

python 2022/1/1 18:34:12 有216人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶