Python函數(shù)參數(shù)定義及傳遞方式解析
python中函數(shù)定義參數(shù)有四種形式:
def fun1(a,b,c): pass def fun2(a=1,b=2,c=3): pass def fun3(*args): pass def fun4(**kargs): pass
四種中最常見是前兩種,基本上一般點(diǎn)的教程都會(huì)涉及,后兩種一般很少單獨(dú)出現(xiàn),常用在混合模式中
第一種 fun1(a,b,c)是直接將實(shí)參賦予形參,根據(jù)位置做匹配,即嚴(yán)格要求實(shí)參的數(shù)量與行參的數(shù)量位置相等,比較一般,大多數(shù)語(yǔ)言常用這種方式。
第二種 fun2(a=1,b=2,c=3)根據(jù)鍵值對(duì)的形式做實(shí)參與形參的匹配,通過(guò)這種式就可以忽略了參數(shù)的位置關(guān)系,直接根據(jù)關(guān)鍵字來(lái)進(jìn)行賦值,同時(shí)該種傳參方式還有個(gè)好處就是可以在調(diào)用函數(shù)的時(shí)候作為個(gè)別選填項(xiàng),不要求數(shù)量上的相等,即可以fun5(3,4)來(lái)調(diào)用fun2函數(shù),這里關(guān)鍵就是前面的3,4覆蓋了原來(lái)a、b兩個(gè)形參的值,但c還是不變采用原來(lái)的默認(rèn)值3,這種模式相較第一種更加靈活,不僅可以通過(guò)fun6(c=5,a=2,b=7)來(lái)打亂行參的位置,而且可以在沒有對(duì)應(yīng)形參傳遞的時(shí)候使用定義函數(shù)時(shí)的默認(rèn)值。
第三種 fun3(*args) ,這定義方式在傳參時(shí)是可以傳入任意個(gè)參數(shù),這些若干參數(shù)都被放到了tuple元組中賦值給行參args,之后要在函數(shù)中使用這些行參,直接操作args這個(gè)tuple元組就可以了,這樣的好處是在參數(shù)的數(shù)量上沒有了限制,但是因?yàn)槭莟uple,其本身還是有次序的,這就仍然存在一定的束縛,在對(duì)參數(shù)操作上也會(huì)有一些不便
第四種 fun4(**kargs)最為靈活,其是以鍵值對(duì)字典的形式向函數(shù)傳參,含有第二種位置的靈活的同時(shí)具有第三種方式的數(shù)量上的無(wú)限制。此外第三四種函數(shù)聲明的方式前的'*',與c里面的指針聲明一樣,這里僅做聲明標(biāo)識(shí)之用
最后要強(qiáng)調(diào)的是四種定義和傳遞方式混合使用(大多數(shù)情況是這種),fun7(a,b,c,**d),但四種方式混用時(shí)要遵守:定義和傳遞時(shí),*kargs必須在*args之后
混合使用時(shí)的賦值過(guò)程為:
1、先根據(jù)前兩種形式定義的函數(shù),按順序把實(shí)參賦值給對(duì)應(yīng)的形參;
2、將多余出非鍵值對(duì)實(shí)參打包組成一個(gè)tuple傳遞給*args;
3、將多余的key=value形式的實(shí)參打包正一個(gè)dicrionary傳遞給**kargs
舉例
def test(x,y=5,*a,**b):
print x,y,a,b
#調(diào)用結(jié)果:
test(1) ===> 1 5 () {}
test(1,2) ===> 1 2 () {}
test(1,2,3) ===> 1 2 (3,) {}
test(1,2,3,4) ===> 1 2 (3,4)
test(x=1) ===> 1 5 () {}
test(x=1,y=1) ===> 1 1 () {}
test(x=1,y=1,a=1) ===> 1 1 () {'a':1}
test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1}
test(1,y=1) ===> 1 1 () {}
test(1,2,y=1) ===> 出錯(cuò),說(shuō)y給賦了多個(gè)值
test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1}
test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python 實(shí)現(xiàn)socket服務(wù)端并發(fā)的四種方式
這篇文章主要介紹了python 實(shí)現(xiàn)socket服務(wù)端并發(fā)的四種方式,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
python中28種極坐標(biāo)繪圖函數(shù)總結(jié)
這篇文章主要為大家詳細(xì)介紹了python中28種極坐標(biāo)繪圖函數(shù)的用法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-09-09
快速解決cv2.imread()讀取圖像為BGR的問(wèn)題
這篇文章主要介紹了快速解決cv2.imread()讀取圖像為BGR的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Python?OpenCV實(shí)現(xiàn)任意角度二維碼矯正
這篇文章主要為大家詳細(xì)介紹了如何利用Python?OpenCV實(shí)現(xiàn)任意角度的二維碼快速矯正,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-05-05
Python實(shí)戰(zhàn)快速上手BeautifulSoup庫(kù)爬取專欄標(biāo)題和地址
BeautifulSoup是爬蟲必學(xué)的技能,BeautifulSoup最主要的功能是從網(wǎng)頁(yè)抓取數(shù)據(jù),Beautiful Soup自動(dòng)將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼2021-10-10
Python實(shí)現(xiàn)監(jiān)控內(nèi)存使用情況和代碼執(zhí)行時(shí)間
我的代碼的哪些部分運(yùn)行時(shí)間最長(zhǎng)、內(nèi)存最多?我怎樣才能找到需要改進(jìn)的地方?在開發(fā)過(guò)程中,我很確定我們大多數(shù)人都會(huì)想知道這一點(diǎn)。本文總結(jié)了一些方法來(lái)監(jiān)控?Python?代碼的時(shí)間和內(nèi)存使用情況,希望對(duì)大家有所幫助2023-01-01
Python文件操作指南解鎖三個(gè)txt文件合并技術(shù)
本文將深入介紹如何利用Python編寫腳本,將三個(gè)文本文件中指定的列數(shù)據(jù)合并成一個(gè)新文件,通過(guò)豐富的示例代碼和詳細(xì)解釋,幫助掌握這一實(shí)用而靈活的數(shù)據(jù)處理技巧2024-01-01
Windows下安裝python2.7及科學(xué)計(jì)算套裝
這篇文章主要向大家介紹的是在windows系統(tǒng)下安裝python 2.7以及numpy安裝、six安裝、dateutil安裝、pyparsing安裝、matplotlib安裝和scipy安裝的方法,分享給大家,需要的小伙伴可以參考下,相對(duì)來(lái)說(shuō),windows下的安裝還是比較簡(jiǎn)單的。2015-03-03
深入解析Python的Tornado框架中內(nèi)置的模板引擎
模板引擎是Web開發(fā)框架中負(fù)責(zé)前端展示的關(guān)鍵,這里我們就來(lái)以實(shí)例深入解析Python的Tornado框架中內(nèi)置的模板引擎,來(lái)學(xué)習(xí)如何編寫Tonardo的模板.2016-07-07

