眾所周知,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ù)制代碼
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長
- 2024SACC中國系統(tǒng)架構(gòu)師大會:探索數(shù)字轉(zhuǎn)型與架構(gòu)演進(jìn)
- 寶武集團(tuán)、落基山研究所等將在2024中國綠色鋼鐵峰會發(fā)表演講
- 有為青年|華為校園公開課走進(jìn)龍巖學(xué)院,loT +鴻蒙開啟物聯(lián)網(wǎng)開發(fā)新征程
- 2025中國(鄭州)國際電線電纜及線材產(chǎn)業(yè)展覽會
- 中國歐亞國際軍民兩用技術(shù)產(chǎn)業(yè)博覽會、中國國際電子信息暨國防電子博覽會與中國西安國際航空航天暨無人機(jī)展覽會
- 專家解讀:從傳統(tǒng)數(shù)據(jù)中心到智算中心的三大根本差異
- 跨界!中國第一個物業(yè)跨界Plus系列展將于2025年3月29日舉辦,上海首秀!
- 賽氪承辦中國科普作家協(xié)會科普活動,聚焦運(yùn)籌學(xué)與物流融合
- 共碼未來,待到山花爛漫時,鴻蒙開發(fā)者論壇圓滿收官!
- 動手體驗+以考代練!共碼未來HarmonyOS Workshop圓滿收官
免責(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)鏈接。