目錄
?編輯
7.3.2 刪除包含特定值的所有列表元素
pets.py
7.3.3 使用用戶輸入來填充字典
mountain_poll.py
7.4 小結(jié)
第8章
函 數(shù)
8.1 定義函數(shù)
greeter.py
8.1.1 向函數(shù)傳遞信息
8.1.2 實參和形參
8.2.1 位置實參
2. 位置實參的順序很重要
8.2.2 關(guān)鍵字實參
往期快速傳送門??(在文章最后):
7.3.2 刪除包含特定值的所有列表元素
在第3章中,我們使用函數(shù)remove()來刪除列表中的特定值,這之所以可行,是因為要刪除 的值在列表中只出現(xiàn)了一次。如果要刪除列表中所有包含特定值的元素,該怎么辦呢? 假設你有一個寵物列表,其中包含多個值為'cat'的元素。要刪除所有這些元素,可不斷運 行一個while循環(huán),直到列表中不再包含值'cat',如下所示:
pets.py
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
我們首先創(chuàng)建了一個列表,其中包含多個值為'cat'的元素。打印這個列表后,Python進入 while循環(huán),因為它發(fā)現(xiàn)'cat'在列表中至少出現(xiàn)了一次。進入這個循環(huán)后,Python刪除第一個'cat' 并返回到while代碼行,然后發(fā)現(xiàn)'cat'還包含在列表中,因此再次進入循環(huán)。它不斷刪除'cat', 直到這個值不再包含在列表中,然后退出循環(huán)并再次打印列表:
['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']
7.3.3 使用用戶輸入來填充字典
可使用while循環(huán)提示用戶輸入任意數(shù)量的信息。下面來創(chuàng)建一個調(diào)查程序,其中的循環(huán)每 次執(zhí)行時都提示輸入被調(diào)查者的名字和回答。我們將收集的數(shù)據(jù)存儲在一個字典中,以便將回答 同被調(diào)查者關(guān)聯(lián)起來:
mountain_poll.py
responses = {}
# 設置一個標志,指出調(diào)查是否繼續(xù)
polling_active = True
while polling_active:
# 提示輸入被調(diào)查者的名字和回答
1 name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")
# 將答卷存儲在字典中
2 responses[name] = response
# 看看是否還有人要參與調(diào)查
3 repeat = input("Would you like to let another person respond? (yes/ no) ")
if repeat == 'no':
polling_active = False
# 調(diào)查結(jié)束,顯示結(jié)果
print("\n--- Poll Results ---")
4 for name, response in responses.items():
print(name + " would like to climb " + response + ".")
這個程序首先定義了一個空字典(responses),并設置了一個標志(polling_active),用于 指出調(diào)查是否繼續(xù)。只要polling_active為True,Python就運行while循環(huán)中的代碼。 在這個循環(huán)中,提示用戶輸入其用戶名及其喜歡爬哪座山(見1)。將這些信息存儲在字典 responses中(見2),然后詢問用戶調(diào)查是否繼續(xù)(見3)。如果用戶輸入yes,程序?qū)⒃俅芜M入 while循環(huán);如果用戶輸入no,標志polling_active將被設置為False,而while循環(huán)將就此結(jié)束。 最后一個代碼塊(見4)顯示調(diào)查結(jié)果。
如果你運行這個程序,并輸入一些名字和回答,輸出將類似于下面這樣:
What is your name? Eric
Which mountain would you like to climb someday? Denali
Would you like to let another person respond? (yes/ no) yes
What is your name? Lynn
Which mountain would you like to climb someday? Devil's Thumb
Would you like to let another person respond? (yes/ no) no
--- Poll Results ---
Lynn would like to climb Devil's Thumb.
Eric would like to climb Denali.
7.4 小結(jié)
在本章中,你學習了:如何在程序中使用input()來讓用戶提供信息;如何處理文本和數(shù)字 輸入,以及如何使用while循環(huán)讓程序按用戶的要求不斷地運行;多種控制while循環(huán)流程的方式: 設置活動標志、使用break語句以及使用continue語句;如何使用while循環(huán)在列表之間移動元素, 以及如何從列表中刪除所有包含特定值的元素;如何結(jié)合使用while循環(huán)和字典。 在第8章中,你將學習函數(shù)。函數(shù)讓你能夠?qū)⒊绦蚍殖啥鄠€很小的部分,其中每部分都負責 完成一項具體任務。你可以根據(jù)需要調(diào)用同一個函數(shù)任意次,還可將函數(shù)存儲在獨立的文件中。 使用函數(shù)可讓你編寫的代碼效率更高,更容易維護和排除故障,還可在眾多不同的程序中重用。
第8章
函 數(shù)
8.1 定義函數(shù)
下面是一個打印問候語的簡單函數(shù),名為greet_user():
greeter.py
1 def greet_user():
2 """顯示簡單的問候語"""
3 print("Hello!")
4 greet_user()
這個示例演示了最簡單的函數(shù)結(jié)構(gòu)。1處的代碼行使用關(guān)鍵字def來告訴Python你要定義一個 函數(shù)。這是函數(shù)定義,向Python指出了函數(shù)名,還可能在括號內(nèi)指出函數(shù)為完成其任務需要什么 樣的信息。在這里,函數(shù)名為greet_user(),它不需要任何信息就能完成其工作,因此括號是空 的(即便如此,括號也必不可少)。最后,定義以冒號結(jié)尾。 緊跟在def greet_user():后面的所有縮進行構(gòu)成了函數(shù)體。2處的文本是被稱為文檔字符串 (docstring)的注釋,描述了函數(shù)是做什么的。文檔字符串用三引號括起,Python使用它們來生成有關(guān)程序中函數(shù)的文檔。 代碼行print("Hello!")(見3)是函數(shù)體內(nèi)的唯一一行代碼,greet_user()只做一項工作: 打印Hello!。 要使用這個函數(shù),可調(diào)用它。函數(shù)調(diào)用讓Python執(zhí)行函數(shù)的代碼。要調(diào)用函數(shù),可依次指定 函數(shù)名以及用括號括起的必要信息,如4處所示。由于這個函數(shù)不需要任何信息,因此調(diào)用它時 只需輸入greet_user()即可。和預期的一樣,它打印Hello!:
Hello!
8.1.1 向函數(shù)傳遞信息
只需稍作修改,就可以讓函數(shù)greet_user()不僅向用戶顯示Hello!,還將用戶的名字用作抬 頭。為此,可在函數(shù)定義def greet_user()的括號內(nèi)添加username。通過在這里添加username, 就可讓函數(shù)接受你給username指定的任何值?,F(xiàn)在,這個函數(shù)要求你調(diào)用它時給username指定一 個值。調(diào)用greet_user()時,可將一個名字傳遞給它,如下所示:
def greet_user(username):
"""顯示簡單的問候語"""
print("Hello, " + username.title() + "!")
greet_user('jesse')
代碼greet_user('jesse')調(diào)用函數(shù)greet_user(),并向它提供執(zhí)行print語句所需的信息。這 個函數(shù)接受你傳遞給它的名字,并向這個人發(fā)出問候:
Hello, Jesse!
同樣,greet_user('sarah')調(diào)用函數(shù)greet_user()并向它傳遞'sarah',打印Hello, Sarah!。 你可以根據(jù)需要調(diào)用函數(shù)greet_user()任意次,調(diào)用時無論傳入什么樣的名字,都會生成相應的 輸出。
8.1.2 實參和形參
前面定義函數(shù)greet_user()時,要求給變量username指定一個值。調(diào)用這個函數(shù)并提供這種 信息(人名)時,它將打印相應的問候語。
在函數(shù)greet_user()的定義中,變量username是一個形參——函數(shù)完成其工作所需的一項信 息。在代碼greet_user('jesse')中,值'jesse'是一個實參。實參是調(diào)用函數(shù)時傳遞給函數(shù)的信 息。我們調(diào)用函數(shù)時,將要讓函數(shù)使用的信息放在括號內(nèi)。在greet_user('jesse')中,將實參 'jesse'傳遞給了函數(shù)greet_user(),這個值被存儲在形參username中。
注意 大家有時候會形參、實參不分,因此如果你看到有人將函數(shù)定義中的變量稱為實參或?qū)?函數(shù)調(diào)用中的變量稱為形參,不要大驚小怪。
8.2 傳遞實參
鑒于函數(shù)定義中可能包含多個形參,因此函數(shù)調(diào)用中也可能包含多個實參。向函數(shù)傳遞實參 的方式很多,可使用位置實參,這要求實參的順序與形參的順序相同;也可使用關(guān)鍵字實參,其 中每個實參都由變量名和值組成;還可使用列表和字典。下面來依次介紹這些方式。
8.2.1 位置實參
你調(diào)用函數(shù)時,Python必須將函數(shù)調(diào)用中的每個實參都關(guān)聯(lián)到函數(shù)定義中的一個形參。為此, 最簡單的關(guān)聯(lián)方式是基于實參的順序。這種關(guān)聯(lián)方式被稱為位置實參。 為明白其中的工作原理,來看一個顯示寵物信息的函數(shù)。這個函數(shù)指出一個寵物屬于哪種動 物以及它叫什么名字,如下所示:
1 def describe_pet(animal_type, pet_name):
"""顯示寵物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
2 describe_pet('hamster', 'harry')
這個函數(shù)的定義表明,它需要一種動物類型和一個名字(見1)。調(diào)用describe_pet()時,需 要按順序提供一種動物類型和一個名字。例如,在前面的函數(shù)調(diào)用中,實參'hamster'存儲在形 參animal_type中,而實參'harry'存儲在形參pet_name中(見2)。在函數(shù)體內(nèi),使用了這兩個形 參來顯示寵物的信息。
輸出描述了一只名為Harry的倉鼠
I have a hamster.
My hamster's name is Harry.
1. 調(diào)用函數(shù)多次
你可以根據(jù)需要調(diào)用函數(shù)任意次。要再描述一個寵物,只需再次調(diào)用describe_pet()即可:
def describe_pet(animal_type, pet_name):
"""顯示寵物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('hamster', 'harry')
第二次調(diào)用describe_pet()函數(shù)時,我們向它傳遞了實參'dog'和'willie'。與第一次調(diào)用時 一樣,Python將實參'dog'關(guān)聯(lián)到形參animal_type,并將實參'willie'關(guān)聯(lián)到形參pet_name。與前 面一樣,這個函數(shù)完成其任務,但打印的是一條名為Willie的小狗的信息。至此,我們有一只名 為Harry的倉鼠,還有一條名為Willie的小狗:
I have a hamster.
My hamster's name is Harry.
I have a dog.
My dog's name is Willie.
調(diào)用函數(shù)多次是一種效率極高的工作方式。我們只需在函數(shù)中編寫描述寵物的代碼一次,然 后每當需要描述新寵物時,都可調(diào)用這個函數(shù),并向它提供新寵物的信息。即便描述寵物的代碼 增加到了10行,你依然只需使用一行調(diào)用函數(shù)的代碼,就可描述一個新寵物。 在函數(shù)中,可根據(jù)需要使用任意數(shù)量的位置實參,Python將按順序?qū)⒑瘮?shù)調(diào)用中的實參關(guān)聯(lián) 到函數(shù)定義中相應的形參。
2. 位置實參的順序很重要
使用位置實參來調(diào)用函數(shù)時,如果實參的順序不正確,結(jié)果可能出乎意料:
def describe_pet(animal_type, pet_name):
"""顯示寵物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('harry', 'hamster')
在這個函數(shù)調(diào)用中,我們先指定名字,再指定動物類型。由于實參'harry'在前,這個值將 存儲到形參animal_type中;同理,'hamster'將存儲到形參pet_name中。結(jié)果是我們得到了一個 名為Hamster的harry:
I have a harry.
My harry's name is Hamster.
如果結(jié)果像上面一樣搞笑,請確認函數(shù)調(diào)用中實參的順序與函數(shù)定義中形參的順序一致。
8.2.2 關(guān)鍵字實參
關(guān)鍵字實參是傳遞給函數(shù)的名稱—值對。你直接在實參中將名稱和值關(guān)聯(lián)起來了,因此向函 數(shù)傳遞實參時不會混淆(不會得到名為Hamster的harry這樣的結(jié)果)。關(guān)鍵字實參讓你無需考慮函 數(shù)調(diào)用中的實參順序,還清楚地指出了函數(shù)調(diào)用中各個值的用途。
下面來重新編寫pets.py,在其中使用關(guān)鍵字實參來調(diào)用describe_pet():
def describe_pet(animal_type, pet_name):
"""顯示寵物的信息"""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(animal_type='hamster', pet_name='harry')
函數(shù)describe_pet()還是原來那樣,但調(diào)用這個函數(shù)時,我們向Python明確地指出了各個實 參對應的形參。看到這個函數(shù)調(diào)用時,Python知道應該將實參'hamster'和'harry'分別存儲在形 參animal_type和pet_name中。輸出正確無誤,它指出我們有一只名為Harry的倉鼠。
關(guān)鍵字實參的順序無關(guān)緊要,因為Python知道各個值該存儲到哪個形參中。下面兩個函數(shù)調(diào) 用是等效的:
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')
注意 使用關(guān)鍵字實參時,務必準確地指定函數(shù)定義中的形參名。文章來源:http://www.zghlxwxcb.cn/news/detail-754617.html
Python:核心知識點整理大全12-筆記-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-754617.html
往期快速傳送門??(在文章最后):
到了這里,關(guān)于關(guān)于“Python”的核心知識點整理大全15的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!