了解Lambda

时间:2009-12-21 04:31:31

标签: python map lambda

X = 5
L = list(map(lambda x: 2**X, range(7)))
print (L)

......我期待着回归:

[1, 2, 4, 8, 16, 32, 64]

...相反,它会返回:

[32, 32, 32, 32, 32, 32, 32]

我做错了什么?

4 个答案:

答案 0 :(得分:10)

Python区分大小写,因此lambda x: 2**X表示:接受一个参数,调用它(小写)x,完全忽略它,然后将2返回到全局变量的幂(大写){{ 1}}。

答案 1 :(得分:4)

Python区分大小写。 xX是不同的变量。

顺便说一下,构建L的方法可能更简单

L=[2**x for x in range(7)]

或者,如果您想使用maplambda,那么

L=map(lambda x: 2**x, range(7))

就足够了。 map返回一个列表,因此您不必将表达式包装在list(...)中。

答案 2 :(得分:2)

尝试L = list(map(lambda x: 2**x, range(7)))一次。您使用的是X而不是x

答案 3 :(得分:0)

你有一个错字。它应该是:

# Upper case X refers to 5
list(map(lambda x: 2**x, range(7)))