經歷下面,我有我不認爲目前尚無答覆(並在課不叫出)一個問題:學習Python困難的方法#25
當我運行任print_first_word
或print_last_word
,結果列表通過.pop()
更改 - 但是當我運行print_first_and_last
函數時,列表在完成後仍保持不變。由於print_first_and_last
同時撥打print_first_word
和print_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)
字符串通過值傳遞(所以創建一個新副本),而列表通過引用傳遞給函數。在你的例子中,如果你在創建句子的新副本後調用'print_first_and_last',句子將不會被修改。另一方面,如果您將一個列表傳遞給'print_first_and_last',它將被修改。 – dparpyani
@dparpyani:一切都通過python中的引用傳遞...某些對象只是呈現一個不可變的接口。 –
你可以舉一個例子,你可以調用'print_first_and_last()',那麼你覺得令人驚訝的具體輸出是什麼? –