質問

    

この質問にはすでに回答があります:

         

これを理解しようとしています:

c = 1
def f(n):
    print c + n 
def g(n):
    c = c + n

f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment

ありがとう!

役に立ちましたか?

解決

関数内では、割り当てられた変数はデフォルトでローカル変数として扱われます。グローバル変数に割り当てるには、 global ステートメント:

def g(n):
    global c
    c = c + n

これはPythonの風変わりな領域の1つであり、私と一緒に座ったことはありません。

他のヒント

グローバル状態は避けるべきものであり、特に変更する必要があります。 g()が単純に2つのパラメーターを取るか、または f()および g()が< code> c インスタンス属性

class A:
    c = 1
    def f(self, n):
        print self.c + n
    def g(self, n):
        self.c += n

a = A()
a.f(1)
a.g(1)
a.f(1)

出力:

2
3

グレッグの投稿の正誤表:

参照される前にがあってはなりません。見てみましょう:

x = 1
def explode():
    print x # raises UnboundLocalError here
    x = 2

xが参照された後に割り当てられた場合でも、爆発します。 Pythonでは、変数はローカルまたは外部スコープを参照でき、1つの関数で変更することはできません。

Gregが言ったこと以外に、Python 3.0には、「囲みスコープで定義されている名前がある」と述べるための非ローカルステートメントがあります。グローバルとは異なり、これらの名前は現在のスコープ外で既に定義されている必要があります。名前と変数を追跡するのは簡単です。現在、「グローバルなもの」がどこにあるかを確認することはできません。正確に定義されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top