質問
この質問にはすでに回答があります:
これを理解しようとしています:
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には、「囲みスコープで定義されている名前がある」と述べるための非ローカルステートメントがあります。グローバルとは異なり、これらの名前は現在のスコープ外で既に定義されている必要があります。名前と変数を追跡するのは簡単です。現在、「グローバルなもの」がどこにあるかを確認することはできません。正確に定義されています。
所属していません StackOverflow