【发布时间】:2014-04-13 00:09:52
【问题描述】:
考虑以下几点:
def f():
a = 2
b = [a + i for i in range(3)]
f()
这运行没有问题。据我了解(如果我错了,请纠正我),列表理解表达式引入了一个新的范围,但由于它是在一个函数中创建的(而不是一个类),它可以访问周围的范围,包括变量a。
相反,如果我要进入调试模式,则在上面的第 3 行停止,然后在解释器中手动编写以下内容
>>> b = [a + i for i in range(3)]
我收到一个错误:
Traceback (most recent call last):
File "<string>", line 293, in runcode
File "<interactive input>", line 1, in <module>
File "<interactive input>", line 1, in <listcomp>
NameError: global name 'a' is not defined
这是为什么?当我在调试模式下停在给定行时,我可以访问的范围与运行时的范围不一样吗?
(顺便说一下,我正在使用 PyScripter)
【问题讨论】:
标签: python python-3.x scope list-comprehension