有两个例子。
# 1st example
>>> def accum(sum, a):
return sum + a
>>> sum = 0
>>> for sum in iter(lambda:accum(sum, 2), 40):
print sum,
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32...
# 2nd example
>>> def accum(sum, a):
return sum + a
>>> sum = 0
>>> for sum in iter(accum(sum, 2), 40):
print sum,
TypeError: iter(v, w) : v must be callable
为什么lambda函数不会产生错误但是accum函数会产生错误?
提前致谢:)
答案 0 :(得分:2)
在这两种情况下,您都不会传递带参数的函数。在第二种情况下,v
的值绑定到整数2
,而在第一种情况下,v
指的是可调用的匿名lambda函数() -> sum + a
。
以下2几乎相同:
def x():
return sum + a
x = lambda: sum + a
除了lambda不提供良好的调试回溯,因为lambda函数是未命名的。
此外,变量的名称有点误导,花了一些时间来弄清楚发生了什么。正好有两个变量称为sum
- 一个在accum
函数中,另一个在全局范围内。还有第3个蒙版的,包含全局内置函数sum
...
答案 1 :(得分:0)
lambda
是一个匿名函数,可以调用。如果符号令人困惑,可以用命名函数替换它:
def wrapper():
return accum(sum, 2)
for sum in iter(wrapper, 40):
v
参数必须是可调用的。 accum(sum, 2)
的结果是一个整数,不可调用。