python中的变量范围,为什么它的工作原理?

时间:2012-08-14 12:47:45

标签: python python-2.7 python-2.x

在下面的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

1 个答案:

答案 0 :(得分:4)

如评论中所示,for循环,while循环,if语句等不会创建新范围。实际上,创建新范围的唯一事情是函数,类,模块和方法。因此,当您在for循环内创建一个新变量时,它在该循环之外可用,因为它们共享相同的范围。