2017-10-19 76 views
-1

得到了某種原因,我must寫代碼像這樣一些麻煩的時候寫一些像這樣的代碼我如何使用局部變量在內高清功能

def wrapper(v): 
    v() 
def abc(): 
    b=1 
    c=2 
def bc(): 
    b=b+c 
    wrapper(bc) 
    return b 
print(abc()) 

結果UnboundLocalError: local variable 'b' referenced before assignment

。 所以我改變我的代碼,這樣的方式來擺脫聖母院問題

def wrapper(v): 
    v() 
def abc(): 
    b=[1,2] 
def bc(): 
    b[0]=b[1]+b[0] 
    wrapper(bc) 
    return b[0] 
print(abc()) 

這是令人難以置信得了3,當我運行此腳本。 我想知道關於這種現象的合理解釋。 爲什麼我第一次得不到3?

+1

請在發佈前正確地縮進您的代碼。這真的很難再現其他問題 – Uriel

+0

'abc'甚至不會調用'bc' – aaron

+0

當您甚至不打擾修復代碼縮進時,爲什麼我們應該打擾您的問題? –

回答

0

這確實是一種奇怪的寫代碼的方式。但是,如果你出於任何原因需要這個結構:你的第一個代碼的主要問題是你忘記了每個函數結尾處的return語句。 此代碼複製3並且接近您的版本:

def wrapper(v): 
    return v() 


def abc(): 
    b = 1 
    c = 2 

    def bc(): 
     return b + c 

    return wrapper(bc) 


print(abc())