2011-11-24 90 views

回答

0

不,這不是一個錯誤,這種行爲已經在Python很長一段時間了。

問題是,列表對象是可變的,即你可以改變它,當你調用一個函數時,你不會得到一個新的默認值。發生的事情是這樣的:

def bug(numbers = []): 
    numbers.append(1) 
    return numbers 

此時功能bug已經建立,這是創造了numbers默認值列表。

print bug() 

現在我們調用了一次bug並將1添加到函數定義時創建的列表中。

print bug() 

當我們調用函數,我們再次得到相同的列表,所以之前我們得到添加到列表中的兩個1秒。

通常的解決方法是定義你的功能如下:

def bug(numbers = None): 
    if numbers is None: 
     numbers = [] 
    numbers.append(1) 
    return numbers 

閱讀this瞭解更多詳情。

0

numbers=[]僅評估一次(當函數被定義時)。所以它總是一樣的列表。

爲了避免這種情況,改變這樣的功能:

def not_a_bug(numbers=None): 
    if numbers is None: 
     numbers = [] 
    numbers.append(1) 
    return numbers