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

しかし、もう1レベルアウトデントすると、機能しなくなります

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 に答える