閱讀《Python編程從入門到實踐》Day07

第八章(一)

函數(shù)是帶名字的代碼塊,用于完成具體的工作。要執(zhí)行函數(shù)定義的特定任務(wù),可調(diào)用該函數(shù)。當你需要在程序中多次實現(xiàn)同一項任務(wù)時,就可以調(diào)用該函數(shù),而不必反復(fù)編寫重復(fù)的代碼。從而使得程序的編寫、閱讀、測試和修復(fù)都會更容易。

1、定義函數(shù)

def greet_user():
    print("Hello!")
greet_user()
# 輸出:
Hello!

使用關(guān)鍵字def來定義一個函數(shù),需要指明函數(shù)的名稱,有時候需要在括號內(nèi)指出函數(shù)為完成其任務(wù)需要什么樣的信息。定義中以冒號結(jié)尾,其下的所有縮進行構(gòu)成了函數(shù)體。要使用函數(shù),就要調(diào)用它。要調(diào)用函數(shù),可以依次指定函數(shù)名以及用括號括起的必要信息。

(1)向函數(shù)傳遞信息
def greet_user(username):
    print("Hello, " + username + "!")
greet_user('Lily')
# 輸出:
Hello, Lily!

可以根據(jù)需要調(diào)用函數(shù)任意次,調(diào)用時無論傳入什么樣的名字,都會生成相應(yīng)的輸出。

(2)實參和形參

在上述的greet_user()函數(shù)的定義中,變量username是一個形參——函數(shù)完成其工作所需的一項信息。在greet_user('Lily')函數(shù)調(diào)用中,'Lily'是一個實參。實參是調(diào)用函數(shù)時傳遞給函數(shù)的信息。在調(diào)用時,實參的值就被存儲在形參中。

2、傳遞實參

實參和形參可以有多個。向函數(shù)傳遞實參的方式很多,可使用位置實參,這要求實參的順序與形參的順序相同;也可以使用關(guān)鍵字實參,其中每個實參都由變量名和值組成;還可使用列表和字典。

(1)位置實參

調(diào)用函數(shù)時,Python必須將函數(shù)調(diào)用中的每個實參都關(guān)聯(lián)到函數(shù)定義中的一個形參。所以最簡單的關(guān)聯(lián)方式是基于實參的順序,這種關(guān)聯(lián)方式被稱為位置實參。

def describe_pet(animal_type, pet_name):
    print("I have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('hamster', 'harry')
# 輸出:
I have a hamster.
My hamster's name is Harry.

這個函數(shù)的定義表明,它需要一種動物類型和一個名字。調(diào)用該函數(shù)時,需要按順序提供一種動物類型和一個名字。
調(diào)用函數(shù)多次:

describe_pet('hamster', 'harry')
describe_pet('dog', '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ù)中,可根據(jù)需要使用任意數(shù)量的位置形參,Python將按順序?qū)⒑瘮?shù)調(diào)用中的實參關(guān)聯(lián)到函數(shù)定義中相應(yīng)的形參。
位置實參的位置很重要:
使用位置實參來調(diào)用函數(shù)時,實參的順序一定要和形參的位置一致,否則會導(dǎo)致結(jié)果出乎意料。

(2)關(guān)鍵字實參

關(guān)鍵字實參是傳遞給函數(shù)的名稱-值對。可以直接將實參中的名稱和值關(guān)聯(lián)起來,而無需考慮函數(shù)調(diào)用中的實參順序,還清楚地指出了函數(shù)調(diào)用中各個值的用途。

def describe_pet(animal_type, pet_name):
    print("I have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(pet_name='harry', animal_type='hamster')
# 輸出:
I have a hamster.
My hamster's name is Harry.

在調(diào)用函數(shù)時,我們向Python明確指出了各個實參對應(yīng)的形參。關(guān)鍵字實參的順序無關(guān)緊要,輸出的結(jié)果也在預(yù)料之中。但是需要注意的是,使用關(guān)鍵字實參時,務(wù)必準確地指定函數(shù)定義中的形參名。

(3)默認值

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

def describe_pet(pet_name, animal_type='dog'):
    print("I have a " + animal_type + ".")
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(pet_name='willie')
# 輸出:
I have a dog.
My dog's name is Willie.

這里在函數(shù)的定義中給動物類型指定了默認值小狗。若在調(diào)用時沒有指定動物類型這個值,就默認為小狗。
另外,當函數(shù)定義中需要給某個實參給定默認值,該實參必須放在所有實參的后面。因為位置實參依然會按照順序傳遞實參。
注意:在使用默認值時,在形參列表中必須先列出沒有默認值的形參,再列出有默認值的形參。這讓Python依然能夠正確地解讀位置實參。

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

鑒于可混合使用位置實參、關(guān)鍵字實參和默認值,通常有多種等效的函數(shù)調(diào)用方式。

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

這些函數(shù)調(diào)用的輸出與前面的例子相同。

(5)避免實參錯誤

當你提供的實參多于或少于函數(shù)完成其工作所需的信息時,將出現(xiàn)實參不匹配錯誤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1音頻 maisy 每周看3集動畫,看一遍之后裸聽音頻,現(xiàn)在石頭聽音頻的時候,基本上能聽懂大部分的句子,能跟著說,...
    蘇夕是我閱讀 211評論 0 0
  • 十里春風(fēng) 不如花田半畝 相約二月芳菲 三月繁花 趁她沒忘記 你沒走遠
    葉一半閱讀 201評論 0 0
  • [精進每一天]第373篇 2018年1月22日 666,意頭,好意頭 一、廣東人凡事很講“意頭”,意頭是好意頭的簡...
    梁億閱讀 16,716評論 0 1
  • 人生中沒有什么坎是過不去的,只是說憋在心里,不說出來會成為一個傷口。 很抱歉,把你們當做耳朵。 不知道你有沒有在大...
    早晚_WYY閱讀 293評論 0 0
  • 寫來留待日后慢慢欣賞?? 蘇軾 十年生死兩茫茫,不思量,自難忘。 陸游 紅酥手,黃藤酒,滿城春色宮墻柳。 李清照 此...
    上冬十二閱讀 231評論 0 1

友情鏈接更多精彩內(nèi)容