0

在下面的 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: name 'methods' is not defined 我正在使用 python 2.7

4

1 回答 1

4

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

于 2012-08-14T13:01:57.467 回答