这是一个python bug吗?或者我对名称范围的理解是错误的?
以下示例在类范围中使用set comprehension:
#/usr/bin/env python
class Foo(object):
xlist = 1,2,3,4,5,6,7,8
xset = {xlist[idx] for idx in range(0, len(xlist), 2)}
此示例引发错误
Traceback (most recent call last):
File "./scope.py", line 2, in <module>
class Foo(object):
File "./scope.py", line 4, in Foo
xset = {xlist[idx] for idx in range(0, len(xlist), 2)}
File "./scope.py", line 4, in <setcomp>
xset = {xlist[idx] for idx in range(0, len(xlist), 2)}
NameError: global name 'xlist' is not defined
但是,以下两个代码不会引起任何异常:
#/usr/bin/env python
class Foo(object):
xlist = 1,2,3,4,5,6,7,8
xset = {idx for idx in range(0, len(xlist), 2)}
#/usr/bin/env python
class Foo(object):
xlist = 1,2,3,4,5,6,7,8
xset = [xlist[idx] for idx in range(0, len(xlist), 2)]
为什么python无法识别第一个“xlist”,而它识别出第一个例子最后一行中的第二个“xlist”?由于pythion可以识别其他两个例子中的“xlist”。甚至列表理解中的“xlist”也可以识别,但是集合理解中的“xlist”无法识别?似乎列表理解的名称范围和集合理解是不同的?
顺便说一句,我的python版本是2.7.6。