が、私はエラー受信し続ける場合から:私はUnboundLocalError声明
def func1():
var = True
def func2():
if something_random and var == True:
do stuff
が、私はエラー受信し続ける場合から:私はUnboundLocalError声明
def func1():
var = True
def func2():
if something_random and var == True:
do stuff
Python関数で変数に代入すると、その変数はデフォルトで関数のローカル変数になります。
var = False # What if func2 was called before func1?
def func1():
global var
var = True
def func2():
global var # Not strictly required, but documentary
something_random = True
if something_random and var == True:
print("stuff")
func1()
func2()
しかし、グローバル変数は、可能な限り避けるべきである:あなたはそれがグローバル作ることができます。どうして?設定されている場所に従うことは困難な場合があり、機能を他の場所で再利用することができないことを意味します。
だから、より良い解決策はカプセル化に次のようになります。
def func1():
var = True
return var # func1 could be shortened to: return True
def func2(var):
something_random = True
if something_random and var == True:
print("stuff")
result = func1()
func2(result) # Some people prefer: func2(func1())
を実行しようとすると、
UnboundLocalError: local variable 'var' referenced before assignment
をvar
がfunc2
の範囲にfunc1
の範囲内で定義され、されていないためです。 See thisは、Pythonの変数スコープの説明に使用します。