向函數傳遞列表
在實際使用中你會發現,向函數傳遞列表是比較實用的,這種列表可能包含名字、數字、可能更復雜的對象(字典)
假設向一個函數傳遞一堆水果,我們說出我們喜歡所有的水果
def Obj(fruits): for fruit in fruits: msg = 'I like '+fruit+'!' print(msg) L = ['apple','orange'] Obj(L)
我們將Obj定義成接受一個水果種類列表,並將其存儲在形參Obj中,這個函數遍歷接受到的列表,然后打印'I like ..!'
在函數中修改列表
#首先定義一個列表,其中包含要打印的字母 letters = ['A','B','C','D'] already_letter = [] #模擬閱讀每個字母,直到字母讀取完畢為止 #將每個已經閱讀過的字母轉移到列表already_letter中 while letters: current_letter = letters.pop() print("Printing letter:"+current_letter) already_letter.append(current_letter) #顯示已經讀取的所有字母 print("\nThe follwing letter has been read:") for letter in already_letter: print(letter)
我們首先需要創建一個列表,還創建一個名為already_letter的空列表,每個已經閱讀過的字母都存儲到這個列表中,只要列表中還有字母,while循環就模擬閱讀過程:從該列表中刪除一個已經讀取的字母,然后將其存儲到變量current_letter中,並顯示一條消息,再將該字母存儲到新列表中,等到循環結束后,再打印出所有的字母。
上述程序改編版
def read_letter(letters,already_letter): """ 讀取每個字母,直到讀取完畢為止 將讀取完畢后的字母存儲到新的列表中 :param letters: :param already_letter: :return: """ while letters: current_letter = letters.pop() #模擬讀取字母的過程 print("Printing letter:" + current_letter) already_letter.append(current_letter) def show_already_letter(already_letter): """ 顯示已經閱讀的所有字母 :param already_letter: :return: """ print("\nThe follwing letters has been read:") for letter in already_letter: print(letter) letters = ['A','B','C','D'] already_letter=[] read_letter(letters,already_letter) show_already_letter(already_letter)
我們定義了函數read_letter(),它包含2個形參:一個需要閱讀字母的列表和一個存儲已經閱讀字母的列表。給定這兩個列表,這個函數模擬閱讀過程:將字母一個個閱讀,然后打印,最后將其轉存到存儲已閱讀的列表中,函數show_already_letter()主要是打印已經閱讀字母列表,最后四條語句是定義一個列表與一個空列表,調用上面的兩個函數。
總結
上面的函數中,在讀取完畢之后,letters列表就編程空列表了,那么假如我們想在讀取完列表后還保留該列表,該怎么辦呢?
使用切片法[ : ]創建列表的副本
def read_letter(letters,already_letter): """ 讀取每個字母,直到讀取完畢為止 將讀取完畢后的字母存儲到新的列表中 :param letters: :param already_letter: :return: """ while letters: current_letter = letters.pop() #模擬讀取字母的過程 print("Printing letter:" + current_letter) already_letter.append(current_letter) def show_already_letter(already_letter): """ 顯示已經閱讀的所有字母 :param already_letter: :return: """ print("\nThe follwing letters has been read:") for letter in already_letter: print(letter) letters = ['A','B','C','D'] already_letter=[] read_letter(letters[:],already_letter) show_already_letter(already_letter) print(letters)