傳智播客鄭州校區(qū)Python學(xué)習(xí)之函數(shù)中的形參與實參

眾所周知,Python中的函數(shù)就是帶名字的代碼塊。如果在寫一段程序的時候,需要多次用到同樣一個功能,就會增加代碼量。而如果把功能作為代碼塊封裝在函數(shù)里,通過調(diào)用,就會讓寫程序員變得很方便。今天,傳智播客鄭州校區(qū)就為大家介紹Python函數(shù)中的形參與實參。

一、傳智播客Python學(xué)習(xí):函數(shù)  

1.1函數(shù)的定義使用def關(guān)鍵字,如下:

def user():                        def 關(guān)鍵字后面加函數(shù)名定義函數(shù),定義以冒號結(jié)尾    """內(nèi)部代碼塊"""                使用三引號來構(gòu)成文檔字符串,用來解釋該函數(shù)的主要功能,這是一個很好的編碼習(xí)慣      print("Hello World")       函數(shù)體,用來寫該函數(shù)需要完成的功能的代碼user()                 使用函數(shù)名()的方式調(diào)用函數(shù)

1.2 向函數(shù)傳遞參數(shù)信息

在定義函數(shù)的時候,可以在函數(shù)的()內(nèi)加入變量,在調(diào)用函數(shù)的時候就可以給函數(shù)傳入對應(yīng)的值,以上個例子稍作修改:

復(fù)制代碼def user(username):    """內(nèi)部代碼塊"""    print("Hello World,"+username)    在定義函數(shù)的時候傳入變量username,在調(diào)用該函數(shù)的時候就可以通過傳值來讓函數(shù)實現(xiàn)相應(yīng)的功能user("尼古拉斯趙四")輸出結(jié)果:Hello World,尼古拉斯趙四復(fù)制代碼

二、傳智播客Python學(xué)習(xí):形參和實參

從名字就可以看出,實參是一個實實在在存在的參數(shù),是實際占用內(nèi)存地址的,而形參只是意義上的一種參數(shù),在定義的時候是不占內(nèi)存地址的,如在上面例子中,username就是一個形參,尼古拉斯趙四是調(diào)用函數(shù)時傳入的一個實參,它的值被存儲在形參username中。

函數(shù)的調(diào)用中,可能存在多個實參,在給函數(shù)傳遞參數(shù)的時候只要有兩種方式,位置實參和關(guān)鍵字實參,每個實參都由變量名和值組成,實參還可以是列表、字典

1.位置實參

在調(diào)用函數(shù)的時候,必須將每個實參都關(guān)聯(lián)到函數(shù)定義中的每一個形參,最簡單的關(guān)聯(lián)方式就是基于實參的順序。

def func(x,y,z):              首先在定義函數(shù)的時候傳入3個形參x,y,z    print(x,y,z)func(3,2,1)           在調(diào)用該函數(shù)時,通過位置實參的方式,將實參映射到形參,一一對應(yīng),即x=3,y=2,z=1運(yùn)行結(jié)果:3 2 1

需要注意一點的就是,如果使用位置實參的方式傳值,傳入的實參個數(shù)必須與形參相同,否則運(yùn)行程序會報。

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

關(guān)鍵字實參是通過關(guān)鍵字-值的方式,關(guān)鍵字實參的方式就不需要考慮函數(shù)調(diào)用過程中實參的順序。同一個參數(shù)不能傳兩個值

復(fù)制代碼def func(x,y,z):    print(x,y,z)func(x=1,y=2,z=3)             通過關(guān)鍵字=值的方式,將實參與形參關(guān)聯(lián)映射,不需要考錄形參的順序,順序也可以改變,即y=2,z=3,x=1 ,運(yùn)行的結(jié)果不會發(fā)生改變運(yùn)行結(jié)果:1 2 3復(fù)制代碼

3.既有順序,又有關(guān)鍵字

復(fù)制代碼def func(x,y,z):    print(x,y,z)func(1,y=2,z=3)               在兩種方式混用的時候,順序?qū)崊⒈仨氁旁陉P(guān)鍵字實參之前,否則會程序報錯,如 1,y=2.3 \ y=2 1,3這種方式都不可行運(yùn)行結(jié)果:1 2 3復(fù)制代碼

4.默認(rèn)值   

在定義函數(shù)的時候,也可以指定形參的默認(rèn)值,如果在調(diào)用函數(shù)時給函數(shù)提供了實參時,Python將使用指定的實參值,否則的,將自動調(diào)用形參的默認(rèn)值。因此,如果給形參指定了默認(rèn)值后,在調(diào)用時可以不用給它傳值,使用默認(rèn)值可以簡化函數(shù)的調(diào)用。如:

def func(x,y=2):             定義函數(shù)的時候在這里給形參設(shè)置了默認(rèn)值y=2    print(x,y)func(1)             在調(diào)用此函數(shù)時,只傳入了一個實參,y的值就會使用默認(rèn)值運(yùn)行結(jié)果:1 2

還可以在調(diào)用的時候,更改默認(rèn)值 ,如

def func(x,y=2):    print(x,y)func(1,3)                    在調(diào)用該函數(shù)的時候,給設(shè)置了默認(rèn)值的形參y再次賦值,這運(yùn)行結(jié)果會使用新傳入的實參值運(yùn)行結(jié)果:1 3

在使用形參默認(rèn)值的時候需要注意:在形參列表中必須先列出沒有默認(rèn)值的形參,再列出有默認(rèn)值的形參。這讓Python依然能夠正確的解讀位置實參。

def func(x=2,y):    print(x,y)func(1)                        這種情況程序是不允許運(yùn)行的

即:在函數(shù)調(diào)用過程中,可以混合使用位置實參,關(guān)鍵字實參和默認(rèn)值參數(shù),但是其中相關(guān)的規(guī)則一定要遵循,否則一定會導(dǎo)致程序的運(yùn)行出錯。

當(dāng)提供的實參多于或少于函數(shù)定義時所提供的形參時,程序會報錯,這時只要根據(jù)報錯信息正確修改即可。

5.列表和字典

當(dāng)不確定需要傳入的值是多少時,在定義形參的時候,可以使用*args(列表),**kwargs(字典)來表示。

復(fù)制代碼def func(*args,**kwargs):        使用*args代表列表。**kwargs代表字典,這種形式可以在調(diào)用函數(shù)的時候傳入多個實參    print(args)    print(kwargs)func(*[1,2,3,4,5],**{"y":1})     如果想要傳入的值以列表或字典的形式顯示出來,就需要在元素前加上*或** 運(yùn)行結(jié)果:(1, 2, 3, 4, 5){'y': 1} 復(fù)制代碼

三、傳智播客Python學(xué)習(xí):函數(shù)的返回值

函數(shù)不是直接顯示輸出的,相反,它會處理一些數(shù)據(jù)并返回一個或一組值。在函數(shù)中用return語句將值返回到調(diào)用函數(shù)的代碼行,返回值能將程序大部分繁重的工作移交到函數(shù)中去完成,從而簡化主程序。

下面是一個簡單的程序,接收姓氏和名稱,返回完整的人名信息

復(fù)制代碼def name(first_name,last_name):    """返回人的姓名"""    full_name=first_name+" "+last_name    return full_nameprint(name("尼古拉斯","趙四"))運(yùn)行結(jié)果:尼古拉斯 趙四復(fù)制代碼

函數(shù)可以返回任何類型的值,包括字典、列表這樣較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。還是上面的例子,返回一個表示人的字典

復(fù)制代碼def name(first_name,last_name,):    """返回人的姓名"""    full_name={"first":first_name,"last":last_name}    return full_nameprint(name("尼古拉斯","趙四"))運(yùn)行結(jié)果為:{'first': '尼古拉斯', 'last': '趙四'}復(fù)制代碼

函數(shù)傳遞列表,傳遞列表在函數(shù)中很有用,在列表中包含數(shù)字、名字甚至更復(fù)雜的對象,下面舉一個例子:

復(fù)制代碼def func(names):    """向列表中的所有用戶問號"""    for i in names:        print("Hello"+" "+i+"!!")func(["劉能","趙四","尼古拉斯"])運(yùn)行結(jié)果:Hello劉能!!Hello 趙四!!Hello 尼古拉斯!!復(fù)制代碼

函數(shù)還可以結(jié)合while循環(huán),下面是一個很簡單的例子,用戶輸入姓氏和名字,最終輸出完整的一句話。

復(fù)制代碼def name(first_name,last_name,):    """返回人的姓名"""    full_name=first_name+last_name    return full_name while True:    print("\nplease tell me your name ")    f_name=input("first name:")    l_name=input("last name:")    print("\n Hello"+name(f_name,l_name)+"!")            輸入姓氏和名字,通過name函數(shù)整合后,輸出結(jié)果復(fù)制代碼

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2018-01-16
傳智播客鄭州校區(qū)Python學(xué)習(xí)之函數(shù)中的形參與實參
眾所周知,Python中的函數(shù)就是帶名字的代碼塊。如果在寫一段程序的時候,需要多次用到同樣一個功能,就會增加代碼量。而如果把功能作為代碼塊封裝在函數(shù)里,通過調(diào)用,就會讓寫程序員變得很方便。今天,傳智播客鄭州校區(qū)就為大家介紹Python函數(shù)中的形參與實參。一、傳智播客Python學(xué)習(xí)

長按掃碼 閱讀全文