在下面的python示例中,方法和属性似乎超出了范围,但它们仍然有效,发生了什么?
for module in output:
a = 1
attributes=[]
methods=[]
for branch in module[2]:
for leaf in branch[2]:
if leaf[0]=="method":
methods.append(leaf[1])
if leaf[0]=="attribute":
attributes.append(leaf[1])
print methods
print attributes
print module[0]
print a
但是如果我再多出一个级别就停止工作
for filename in os.listdir("."):
print filename
fName, fExtension = os.path.splitext(filename)
print fName, fExtension
if fExtension == ".idl":
f = open(filename)
idl = f.read()
f.close()
output = parse(idl)
pprint.pprint(output)
root={}
for module in output:
a = 1
attributes=[]
methods=[]
for branch in module[2]:
for leaf in branch[2]:
if leaf[0]=="method":
methods.append(leaf[1])
if leaf[0]=="attribute":
attributes.append(leaf[1])
print methods
print module[0]
它说:NameError:未定义名称'methods' 我正在使用python 2.7
答案 0 :(得分:4)
如评论中所示,for
循环,while
循环,if
语句等不会创建新范围。实际上,创建新范围的唯一事情是函数,类,模块和方法。因此,当您在for
循环内创建一个新变量时,它在该循环之外可用,因为它们共享相同的范围。