私はこのような単純なコードを持っています:
def function():
ciao = stuff + stuff2
return ciao
def megaf():
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function()
megaf()
コードを実行したときに発生するエラーは
NameError:グローバル名 'stuff'が定義されていません
変数を定義したので、理由がわかりません。
変数stuff
とstuff2
関数の外部の両方を定義しようとしましたが、「UnboundLocalError:ローカル変数 'スタッフ'が割り当て前に参照されました」というエラーが表示されます。私は実際に問題が何であるかを理解することができないので、これの解決策を見つけることさえできません。
Pythonでは、変数にはローカルとグローバルの2つのフレーバーがあります。ローカル変数は関数内からのみ見ることができ(そしてそれらは関数を呼び出すたびに異なります)、グローバル変数はどこからでも見ることができます(そして永続的です)。
また、同じ名前のグローバル変数とローカル変数を持つことも可能です。関数内にローカル変数がある場合、それは名前が参照するローカル変数です。
関数内の変数がローカルかグローバルかを判断するには、その使用方法を確認する必要があります。基本的に、次の場合を除いて、ローカルであると見なされます。
global
ステートメントを使用してグローバルであると宣言されています最初の試行では、最初に割り当ててstuff
、ローカルと見なします(グローバルであると宣言しなかったため)。したがって、外部からそれらにアクセスすることはできません。stuff2
megaf
megaf
あなたの内外に割り当てることによってこれを修正しようとするstuff
と、作成時にそれらに割り当てられ、にローカルになります。用途とローカル変数を参照していますが、あなたがそれらを使用する前に、ローカル変数に割り当てていないとして(ノート外の割り当てへのと異なっているグローバル変数にあります)。stuff2
megaf
megaf
stuff
stuff2
megaf
stuff
stuff2
stuff
stuff2
2つの回避策があります。まず、汚いのは、単にグローバルであると宣言することです。
def function():
ciao = stuff + stuff2
return ciao
def megaf():
global stuff, stuff2
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function()
グローバル変数を使用することは悪い習慣と見なされることが多いため、これは汚いです。他の解決策はfunction
、他の回答で述べられているように、それらをパラメーターとしてに渡すことです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加