2014-07-05 117 views
1

經歷下面,我有我不認爲目前尚無答覆(並在課不叫出)一個問題:學習Python困難的方法#25

當我運行任print_first_wordprint_last_word ,結果列表通過.pop()更改 - 但是當我運行print_first_and_last函數時,列表在完成後仍保持不變。由於print_first_and_last同時撥打print_first_wordprint_last_word,每個人都通過.pop()更改列表,爲什麼在運行print_first_and_last後列表不變?

def break_words(stuff): 
    '''This function will break up words for us.''' 
    stuff.split(' ') 
    return stuff.split(' ') 

def print_first_word(words): 
    '''Prints the first word after popping it off.''' 
    word = words.pop(0) 
    print word 

def print_last_word(words): 
    '''Prints last word in the sentence''' 
    word = words.pop(-1) 
    print word 



def print_first_and_last(sentence): 
    '''Prints first and last words in the sentence.''' 
    words=break_words(sentence) 
    print_first_word(words) 
    print_last_word(words) 
+0

字符串通過值傳遞(所以創建一個新副本),而列表通過引用傳遞給函數。在你的例子中,如果你在創建句子的新副本後調用'print_first_and_last',句子將不會被修改。另一方面,如果您將一個列表傳遞給'print_first_and_last',它將被修改。 – dparpyani

+0

@dparpyani:一切都通過python中的引用傳遞...某些對象只是呈現一個不可變的接口。 –

+0

你可以舉一個例子,你可以調用'print_first_and_last()',那麼你覺得令人驚訝的具體輸出是什麼? –

回答

1

print_first_and_last()第一行是words = break_words(sentence)

此行將創建一個新對象!這個新對象將成爲一個列表,其中包含句子中的每個單詞。這個新的(有些臨時的)對象將被print_first_word()print_last_word()修改。

如果我們改變print_first_and_last()使得它打印的詳細信息,這可能是更清楚:

def print_first_and_last(sentence): 
    words = break_words(sentence) 

    print sentence, words 
    print_first_word(words) 
    print sentence, words 
    print_last_word(words) 
    print sentence, words 
+0

你的答案和Alfasin都很有幫助,謝謝。我認爲我很難將全球與本地概念化。 – Solaxun

+0

所以你幾乎複製我的答案,並延長你的兩句話的答案。這真是蹩腳... – alfasin

+0

@alfasin:我們在同一時間寫或多或少地寫出來。 –

1

運行:

def print_first_and_last(sentence): 
    '''Prints first and last words in the sentence.''' 
    words=break_words(sentence) 
    print words 
    print_first_word(words) 
    print words 
    print_last_word(words) 
    print words 

print_first_and_last('This is the first test') 

將輸出:

['This', 'is', 'the', 'first', 'test'] 
This 
['is', 'the', 'first', 'test'] 
test 
['is', 'the', 'first'] 

,正如你所看,清單words顯然是改變了!

相關問題