【发布时间】:2009-12-21 04:31:30
【问题描述】:
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]
我做错了什么?
【问题讨论】:
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]
我做错了什么?
【问题讨论】:
Python 是区分大小写的,所以lambda x: 2**X 的意思是:接受一个参数,调用它(小写)x,完全忽略它,并返回 2 的全局变量的幂(大写)X。
【讨论】:
Python 区分大小写。 x 和 X 是不同的变量。
顺便说一句,构造L 的更简单的方法可能是
L=[2**x for x in range(7)]
或者,如果您想使用map 和lambda,那么
L=map(lambda x: 2**x, range(7))
足够了。 map 返回一个列表,因此您不必将表达式包装在 list(...) 中。
【讨论】:
尝试L = list(map(lambda x: 2**x, range(7))) 一次。您使用的是X 而不是x。
【讨论】:
你有一个错字。应该是:
# Upper case X refers to 5
list(map(lambda x: 2**x, range(7)))
【讨论】: