【发布时间】:2012-03-01 15:00:13
【问题描述】:
使用以下语法阅读有关堆栈溢出的问题
In [1]: [lambda: x for x in range(5)][0]()
Out[1]: 4
In [2]: [lambda: x for x in range(5)][2]()
Out[2]: 4
但是我很难理解为什么这个输出是 4, 我的理解是它总是将列表的最后一个值作为输出,
In [4]: [lambda: x for x in [1,5,7,3]][0]()
Out[4]: 3
但仍然不相信这个语法是如何以最后一个值结束的。
如果我能得到这个语法的正确解释,我会很高兴
【问题讨论】:
-
你认为你能找到你提到的那个问题吗?这很有趣,我也想弄清楚:)
-
In [84]: [z() for z in (lambda: x for x in range(5))]Out[84]: [0, 1, 2, 3, 4]In [85]: [z() for z in [lambda: x for x in range(5)]]Out[85]: [4, 4, 4, 4, 4]如果使用生成器而不是列表理解,那么输出也会不同! -
@ktodisco:我很确定这是我的问题:stackoverflow.com/questions/9189702/…
-
@Neil G:是的,就是这个.... :)
标签: python lambda closures list-comprehension