我是python脚本新手。 我很困惑lambda如何解释传递的变量,如下例所示。
def create_multipliers():
return [lambda x : i * x for i in range(5)]
for multiplier in create_multipliers():
print multiplier(2),
返回8 8 8 8 8
我看到lambda只接受一个参数(即'x')。
它如何解释create_multipliers中的x和i? 乘数(2)的意思是什么?
请帮忙
还有下面的例子
def make_incrementor (n): return lambda x: x + n
print make_incrementor(22)(33)
返回55
lambda / make_incrementor函数如何决定哪个是'x'和'n'?
答案 0 :(得分:2)
代码的第一部分创建一个lambdas列表,每个lambda都采用单个参数x
并将其与i
相乘。请注意,每个lambda bound到变量i
而不是它的'当前值。由于列表推导后i
的值为4
,因此每个lambda将返回x * 4
:
>>> def create_multipliers():
... return [lambda x: i * x for i in range(5)]
...
>>> l = create_multipliers()
>>> l[0](1)
4
>>> l[4](1)
4
>>> l[4]('foobar')
'foobarfoobarfoobarfoobar'
然后循环将使用参数2
执行每个lambda并将结果打印到同一行。由于有5个lambda,4 * 2
为8,因此您可以获得输出。 ,
语句之后的print
将导致输出打印在同一行:
>>> for multiplier in l:
... print multiplier(2),
...
8 8 8 8 8
make_incrementor
使用相同的原则。它返回一个lambda,它接受单个参数x
,当调用lambda时,它被“决定”。然后它将返回x + n
,其中n
是传递给make_incrementor
的值:
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> inc = make_incrementor(2) # n is "decided" here
>>> inc(3) # and x here
5
UPDATE 嵌套函数示例:
>>> def make_incrementor(n):
... def nested(x):
... return x + n
... return nested
...
>>> inc = make_incrementor(2)
>>> inc(3)
5