函式3傳遞列表-python進階篇三
阿新 • • 發佈:2021-09-10
假設有一個使用者列表,我們要問候其中的每位使用者。下面的示例將一個名字列表傳遞給一個名為greet_users() 的函式,這個函式問候列表中的每個人:
def greet_users(names): """向列表中的每位使用者都發出簡單的問候""" for name in names: msg = "Hello, " + name.title() + "!" print(msg) usernames = ['hannah', 'ty', 'margot'] greet_users(usernames) ''' Hello, Hannah! Hello, Ty! Hello, Margot!'''
在函式中修改列表
# 首先建立一個列表,其中包含一些要列印的設計 unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron'] completed_models = [] # 模擬列印每個設計,直到沒有未列印的設計為止 # 列印每個設計後,都將其移到列表completed_models中 while unprinted_designs: current_design = unprinted_designs.pop() #模擬根據設計製作3D列印模型的過程 print("Printing model:" + current_design) completed_models.append(current_design) # 顯示列印好的所有模型 print("\nThe following models have been printed:") for completed_model in completed_models: print(completed_model)
對上面的案例進行改進,我們可編寫兩個函式,每個都做一件具體的工作。大部分程式碼都與原來相同,只是效率更高。第一個函式將負責處理列印設計的工作,而第二個將概述列印了哪些設計:
def print_models(unprinted_designs, completed_models):""" 模擬列印每個設計,直到沒有未列印的設計為止 列印每個設計後,都將其移到列表completed_models中 """ while unprinted_designs: current_design = unprinted_designs.pop() # 模擬根據設計製作3D列印模型的過程 print("Printing model: " + current_design) completed_models.append(current_design) def show_completed_models(completed_models): """顯示列印好的所有模型""" print("\nThe following models have been printed:") for completed_model in completed_models: print(completed_model) unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron'] completed_models = [] print_models(unprinted_designs, completed_models) show_completed_models(completed_models)
修改但要保留原列表。你可能會做出這樣的決定:即便列印所有設計後,也要保留原來的未列印的設計列表,以供備案。但由於你將所有的設計都移出了unprinted_designs ,這個列表變成了空的,原來的列表沒有了。為解決這個問題,可向函式傳遞列表的副本而不是原件;這樣函式所做的任何修改都隻影響副本,而絲毫不影響原件。
function_name(list_name[:])
print_models(unprinted_designs[:], completed_models)