2013-09-16 37 views
1

這裏是我的代碼:爲什麼「append('w')」返回無?

def list_test(foo): 
    bar = foo.append('w') 
    return bar 

my_input = [7,8,9] 

當我運行它:

>>>print list_test(my_input) 
None 

它的打印輸出None。爲什麼?我該如何解決這個問題?

注:輸出我需要的是:7,8,9,'w'

感謝。

回答

9

list.append()返回無以強調它是一個變異調用的事實。這種修改他們的論點的調用通常返回None。創建新的列表的電話將返回它。

如果list_test返回修改後的名單是很重要的,那麼你的代碼可能是這樣的美好:

def list_test(foo): 
    foo.append('w') 
    return foo 

my_input = [7,8,9] 

>>> print list_test(my_input) 
[7, 8, 9, 'w'] 
>>> print my_input 
[7, 8, 9, 'w'] 

但是,如果我在寫這一點,我會按照慣例變異調用返回None,而這樣寫:

def list_test(foo): 
    foo.append('w') 

my_input = [7,8,9] 

>>> print list_test(my_input) 
None 
>>> print my_input 
[7, 8, 9, 'w'] 

最後,如果你想list_test是非變異,這是它應該返回一個新的列表,而不是修改它的輸入,其中之一可能爲你工作:

def list_test(foo): 
    new_foo = list(foo) 
    new_foo.append('w') 
    return new_foo 

def list_test(foo): 
    return foo + ['w'] 

my_input = [7,8,9] 

>>> print list_test(my_input) 
[7, 8, 9, 'w'] 
>>> print my_input 
[7, 8, 9] 
+0

那麼,我該如何解決這個問題? –

+0

但我應該寫在我的函數,所以當我運行它,它是打印輸出[7,8,9,'w']但是當我運行「my_input」它是返回[7,8,9]? –

+0

看到我最近的編輯。 –

1

因爲append()就地工作,即直接修改foo而不是創建新列表。

3

append將不會返回列表,但會改變原始列表。所以在調用foo.append()後,foo的內容發生了變化。因此foo本身就是新元素的「新」(舊)列表。所以,你可以只寫你的函數是這樣的:

def list_test(foo): 
    foo.append('w') 
    return foo 

注意,這也意味着,你傳遞給函數的原始列表也改變了:

>>> my_input = [7,8,9] 
>>> list_test(my_input) 
[7, 8, 9, 'w'] 
>>> my_input 
[7, 8, 9, 'w'] 
0

list.append() doen't返回任何東西,因爲有用它只修改它的參數(列表)。您可能想要返回foo而不是