【发布时间】:2016-07-14 08:43:46
【问题描述】:
我正在尝试在test.py 中的列表上迭代 lambda func,并且我想获取 lambda 的调用结果,而不是函数对象本身。但是,以下输出确实让我感到困惑。
------test.py---------
#!/bin/env python
#coding: utf-8
a = [lambda: i for i in range(5)]
for i in a:
print i()
--------output---------
<function <lambda> at 0x7f489e542e60>
<function <lambda> at 0x7f489e542ed8>
<function <lambda> at 0x7f489e542f50>
<function <lambda> at 0x7f489e54a050>
<function <lambda> at 0x7f489e54a0c8>
我在将调用结果打印到t时修改了变量名,如下所示,一切顺利。我想知道这是怎么回事。 ?
--------test.py(update)--------
a = [lambda: i for i in range(5)]
for t in a:
print t()
-----------output-------------
4
4
4
4
4
【问题讨论】:
-
抱歉结束,我看错了问题。
-
哎呀,抱歉举报了。我也看错了!
-
我更改了标题,因为它真的很容易略过您的问题并认为您遇到了一个简单的后期绑定问题,而不是与重用变量名相关的问题。 (这在错误的闭包和答案中得到了证明。)新标题引起了人们对您所关注的真正问题的关注。如果您想根据我的做法改写它,请确保保留该方面。
-
以上礼貌和谦逊的表现是我喜欢 Python 社区的地方,尤其是那些经常使用 SO 的 Python 达人。