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]
我做错了什么?
答案 0 :(得分:10)
Python区分大小写,因此lambda x: 2**X
表示:接受一个参数,调用它(小写)x
,完全忽略它,然后将2返回到全局变量的幂(大写){{ 1}}。
答案 1 :(得分:4)
Python区分大小写。 x
和X
是不同的变量。
顺便说一下,构建L
的方法可能更简单
L=[2**x for x in range(7)]
或者,如果您想使用map
和lambda
,那么
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)))