0

以下のコードで

def A():    
    print "in A"

    def B():
        global x
        x += 1
        y += 1
        print "in B"

    x = 0
    y = 0
    print x, y                    
    B()
    print x, y


if __name__ == '__main__':    
    A()

以下の出力とエラーが発生しました

in A
0 0
NameError: global name 'x' is not defined

グローバルを使用する正しい方法は何ですか? 実際、サブ関数 B で x を変更して A に戻そうとしています。また、非グローバル y をチェックアウトして、外側の関数で何が起こるかを確認してみてください。


Haidroさんのヒントで入手

def A():

    print "in A"

    def B():
        global x        
        x += 1
        y = 1
        print "in B"

    global x
    x = 0
    y = 0
    print x, y                    
    B()
    print x, y
4

2 に答える 2

2

同様global xに入れたいと思うでしょう:A()

def A():    
    print "in A"

    def B():
        global x
        global y # Also, don't forget to globalise y!
        x += 1
        y += 1
        print "in B"
    global x
    global y
    x = 0
    y = 0
    print x, y                    
    B()
    print x, y


if __name__ == '__main__':    
    A()

でアクセスできるようglobal xに入れる必要があります。ただし、取得しないように、まだ退出する必要があります。A()B()global xB()UnboundLocalError: local variable 'x' referenced before assignment


構造を再考する必要があるかもしれません。おそらくクラスを使用しますか?

class MyClass(object):
    def __init__(self):
        self.x = 0
        self.y = 0

    def A(self):
        print "in A"
        print self.x, self.y      
        self.B()
        print self.x, self.y

    def B(self):
        self.x += 1
        self.y += 1
        print "in B"

me = MyClass() # Create an instance of the class
me.A()
me.B()
print me.x, me.y

これは以下を返します:

in A
0 0
in B
1 1
in B
2 2
于 2013-07-02T04:30:08.633 に答える