【发布时间】:2011-01-16 17:42:00
【问题描述】:
尝试这样的事情时我有点困惑
b = [lambda x:x**i for i in range(11)]
当我尝试b[1](2) 时,结果是错误的 1024。但是当我这样写的时候
b = [(lambda i: lambda x:x**i)(i) for i in range(11)]
一切正常
>>> b[1](2)
2
>>> b[5](2)
32
它工作正常,但第一个代码有什么问题?
【问题讨论】:
-
您的问题不是重复的,但推理与[this question]的答案相同。 [这个问题]:stackoverflow.com/questions/2222466/…“这个问题。”
-
请注意,
lambda x, i=i: x**i可能是一种更自然的方式来编写您的短语lambda i: lambda x:x**i)(i)。定义函数时计算默认参数。 -
-1:与
lambda搏斗的时间太多。如果lambda似乎不起作用,只需删除 lambda 并使用定义的函数。
标签: python list function list-comprehension