(18)python自定義函數(shù)(1)

3. 函數(shù)

函數(shù)是帶名字的代碼塊,用于完成具體的工作。需要在程序中多次執(zhí)行同一項(xiàng)任務(wù)時(shí),你無需反復(fù)編寫完成該任務(wù)的代碼,而只需調(diào)用執(zhí)行該任務(wù)的函數(shù),讓Python運(yùn)行其中的代碼。通過使用函數(shù),程序的編寫、閱讀、測試和修復(fù)都將更容易。


3.1 定義函數(shù)

定義一個(gè)打印問候語的簡單函數(shù),名為greet_user() 。

def greet_user():

? ? """顯示簡單的問候語"""

? ? print("Hello!")

greet_user()

詳解:

? 這個(gè)示例演示了最簡單的函數(shù)結(jié)構(gòu)

? 關(guān)鍵字def 來告訴Python你要定義一個(gè)函數(shù),指出函數(shù)名,還可能在括號內(nèi)指出函數(shù)為完成其任務(wù)需要什么樣的信息,即參數(shù)。在這里,函數(shù)名為greet_user() ,它不需要任何信息就能完成其工作,因此括號是空的(即便如此,括號也必不可少)。最后,定義以冒號結(jié)尾。

? 緊跟在def greet_user(): 后面的所有縮進(jìn)行構(gòu)成了函數(shù)體。

? 文檔字符串用三引號內(nèi)是文檔字符串 (docstring)的注釋,描述了函數(shù)是做什么的。Python使用它們來生成有關(guān)程序中函數(shù)的文檔。

? 代碼行print("Hello!") 是函數(shù)體,greet_user() 只做一項(xiàng)工作:打印Hello!

? 指定函數(shù)名以及用括號括起的必要信息調(diào)用此函數(shù),由于這個(gè)函數(shù)不需要任何信息,因此調(diào)用它時(shí)只需輸入greet_user() 即可。


3.1.1 向函數(shù)傳遞信息

實(shí)例說明:傳入被問候人名字,打印問候語。

def greet_user(username):

? ? """顯示簡單的問候語"""

? ? print("Hello, " + username.title() + "!")

greet_user('jesse')


3.1.2 實(shí)參和形參

在上例函數(shù)greet_user() 的定義中的變量username 是一個(gè)形參。在調(diào)用函數(shù)greet_user('jesse') 時(shí)傳遞的值'jesse' 是一個(gè)實(shí)參 。實(shí)參是調(diào)用函數(shù)時(shí)實(shí)際傳遞給函數(shù)的信息。


3.2 傳遞實(shí)參

函數(shù)定義中可能包含多個(gè)形參,因此函數(shù)調(diào)用中也可能包含多個(gè)實(shí)參。

向函數(shù)傳遞實(shí)參的方式很多,包括:

? 可使用位置實(shí)參:要求實(shí)參的順序與形參的順序相同;

? 關(guān)鍵字實(shí)參:其中每個(gè)實(shí)參都由變量名和值組成;

? 還可使用列表和字典。


3.2.1 位置實(shí)參

調(diào)用函數(shù)時(shí),Python必須將函數(shù)調(diào)用中的每個(gè)實(shí)參都關(guān)聯(lián)到函數(shù)定義中的一個(gè)形參。嚴(yán)格基于實(shí)參的順序的參數(shù)關(guān)聯(lián)方式被稱為位置實(shí)參 。示例:一個(gè)顯示寵物信息的函數(shù)。

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')

示例說明:

? 函數(shù)的定義需要二個(gè)參數(shù)(形參):動物類型和一個(gè)名字;

? 調(diào)用該函數(shù)時(shí),按順序提供一種動物類型和一個(gè)名字(實(shí)參)。


3.2.2 關(guān)鍵字實(shí)參

關(guān)鍵字實(shí)參是傳遞給函數(shù)的名稱---值對。直接在實(shí)參中將參數(shù)名稱和傳遞的值關(guān)聯(lián)起來了,關(guān)鍵字實(shí)參讓

開發(fā)人員無需考慮函數(shù)調(diào)用中的實(shí)參順序,還清楚地指出了函數(shù)調(diào)用中各個(gè)值的用途。示例:

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')

describe_pet(pet_name='harry', animal_type='hamster') #等效上面一句

注意:關(guān)鍵字參數(shù)不區(qū)分順序,但區(qū)分大小寫。


3.2.3 默認(rèn)值

? 編寫函數(shù)時(shí),可給每個(gè)形參指定默認(rèn)值 。在調(diào)用函數(shù)中給形參提供了實(shí)參時(shí),Python將使用指定的實(shí)參值;否則,將使用形參的默認(rèn)值。因此,給形參指定默認(rèn)值后,可在函數(shù)調(diào)用中省略相應(yīng)的實(shí)參。使用默認(rèn)值可簡化函數(shù)調(diào)用,還可清楚地指出函數(shù)的典型用法。

? 示例:如果你發(fā)現(xiàn)調(diào)用describe_pet() 時(shí),描述的多的是小狗,就可將形參animal_type 的默認(rèn)值設(shè)置為'dog' 。這樣,調(diào)用describe_pet() 來描述小狗時(shí),就可不提供這種信息。

def describe_pet(pet_name, animal_type='dog'):

? ? """顯示寵物的信息"""

? ? print("\nI have a " + animal_type + ".")

? ? print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(pet_name='willie') #省略了對animal_type參數(shù)傳遞實(shí)參,默認(rèn)使用dog

describe_pet('willie') #輸出結(jié)果和上面一句相同

注意:使用參數(shù)默認(rèn)值時(shí),參數(shù)按照位置參數(shù)來解析。即上例中若函數(shù)定義為

def describe_pet(animal_type='dog',pet_name),

則describe_pet(pet_name='willie')或describe_pet('willie')調(diào)用都會報(bào)錯(cuò),位置參數(shù)第二個(gè)參數(shù)未給定。


3.2.4 等效的函數(shù)調(diào)用

實(shí)例:若函數(shù)定義為def describe_pet(pet_name, animal_type='dog'): 則以下調(diào)用都是有效的

# 一條名為Willie的小狗

describe_pet('willie')

describe_pet(pet_name='willie')

# 一只名為Harry的倉鼠

describe_pet('harry', 'hamster')

describe_pet(pet_name='harry', animal_type='hamster')

describe_pet(animal_type='hamster', pet_name='harry')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容