私はこれを理解しようとしています:
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()
が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が割り当てられた場合でも、爆発します。 In Python変数はローカルまたは外部スコープを参照でき、1つの関数で変更することはできません。
グレッグが言ったこと以外に、Python 3.0では、「囲んでいるスコープで定義されている名前がいくつかあります」と述べる非ローカルステートメントがあります。グローバルとは異なり、これらの名前はすでに定義されている必要があります現在のスコープ外です。名前と変数を追跡するのは簡単です。最近では、「グローバルなもの」が正確に定義されている場所を確認できません。