2016-07-24 5 views
0

が、私はエラー受信し続ける場合から:私はUnboundLocalError声明

def func1(): 
    var = True 

def func2(): 
    if something_random and var == True: 
     do stuff 

答えて

0

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()) 
0

を実行しようとすると、

UnboundLocalError: local variable 'var' referenced before assignment 

varfunc2の範囲にfunc1の範囲内で定義され、されていないためです。 See thisは、Pythonの変数スコープの説明に使用します。