【Python】向函數傳遞列表


向函數傳遞列表

在實際使用中你會發現,向函數傳遞列表是比較實用的,這種列表可能包含名字、數字、可能更復雜的對象(字典)

假設向一個函數傳遞一堆水果,我們說出我們喜歡所有的水果

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)
通過這段代碼的打印結果可以看出,列表已經被復制了哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM