眾所周知,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運行結(jié)果:3 2 1
需要注意一點的就是,如果使用位置實參的方式傳值,傳入的實參個數(shù)必須與形參相同,否則運行程序會報。
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 ,運行的結(jié)果不會發(fā)生改變運行結(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這種方式都不可行運行結(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)值運行結(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再次賦值,這運行結(jié)果會使用新傳入的實參值運行結(jié)果:1 3
在使用形參默認(rèn)值的時候需要注意:在形參列表中必須先列出沒有默認(rèn)值的形參,再列出有默認(rèn)值的形參。這讓Python依然能夠正確的解讀位置實參。
def func(x=2,y): print(x,y)func(1) 這種情況程序是不允許運行的
即:在函數(shù)調(diào)用過程中,可以混合使用位置實參,關(guān)鍵字實參和默認(rèn)值參數(shù),但是其中相關(guān)的規(guī)則一定要遵循,否則一定會導(dǎo)致程序的運行出錯。
當(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}) 如果想要傳入的值以列表或字典的形式顯示出來,就需要在元素前加上*或** 運行結(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("尼古拉斯","趙四"))運行結(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("尼古拉斯","趙四"))運行結(jié)果為:{'first': '尼古拉斯', 'last': '趙四'}復(fù)制代碼
函數(shù)傳遞列表,傳遞列表在函數(shù)中很有用,在列表中包含數(shù)字、名字甚至更復(fù)雜的對象,下面舉一個例子:
復(fù)制代碼def func(names): """向列表中的所有用戶問號""" for i in names: print("Hello"+" "+i+"!!")func(["劉能","趙四","尼古拉斯"])運行結(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ù)制代碼
- 關(guān)于召開“PIS 2025 第十一屆中國國際智慧農(nóng)業(yè)與信息化高峰論壇 ”的通知
- PIS 2025 第十一屆中國國際智慧農(nóng)業(yè)與信息化高峰論壇
- 以科技創(chuàng)新推動產(chǎn)業(yè)創(chuàng)新 中國(安徽)科交會打造“聚變?nèi)诤稀睂嵕皥D
- 全國現(xiàn)代物流科技應(yīng)用大會暨城郊大倉基地高質(zhì)量建設(shè)運營服務(wù)論壇、北京市平谷區(qū)建設(shè)國家“平急兩用”發(fā)展先行區(qū)兩周年研討會成功舉辦
- 1規(guī)劃1方案5標(biāo)準(zhǔn)正式發(fā)布,平谷區(qū)落實國家發(fā)展戰(zhàn)略打造“平急兩用”北京樣板
- ClearPier集團確認(rèn)參展2025 ChinaJoy BTOB,三大核心業(yè)務(wù)助力全球數(shù)字營銷新浪潮
- 2025 ChinaJoy MECHTRON機甲宇宙潮流智能家居產(chǎn)品,開啟更智慧、更活力的未來
- 2025 ChinaJoy Express試玩區(qū)新生代游戲力量扎堆
- 【游·見】專訪靈澤科技:在 “歷史幻域” 與 “游戲新境” 的交織中,憑創(chuàng)意播種東方文化游戲夢
- 北京 InfoComm China 2025 今天盛大開幕 AI驅(qū)動專業(yè)視聽新生態(tài),為亞太市場帶來更多機遇
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔ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)鏈接。