python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路
原標(biāo)題:你所不知道的Python|函數(shù)參數(shù)的演進(jìn)之路
函數(shù)參數(shù)處理機(jī)制是Python中一個(gè)非常重要的知識(shí)點(diǎn),隨著Python的演進(jìn),參數(shù)處理機(jī)制的靈活性和豐富性也在不斷增加,使得我們不僅可以寫(xiě)出簡(jiǎn)化的代碼,也能處理復(fù)雜的調(diào)用。
關(guān)鍵字參數(shù)
調(diào)用時(shí)指定參數(shù)的名稱,且與函數(shù)聲明時(shí)的參數(shù)名稱一致。
關(guān)鍵字參數(shù)是Python函數(shù)中最基礎(chǔ)也最常見(jiàn)的,我們寫(xiě)一個(gè)記賬的函數(shù),參數(shù)是需要記錄的時(shí)間和金額。
這里的amount參數(shù)就是一個(gè)關(guān)鍵字參數(shù),關(guān)鍵字參數(shù)支持兩種調(diào)用方式:
位置調(diào)用
關(guān)鍵字調(diào)用
位置調(diào)用,就是按參數(shù)的位置進(jìn)行調(diào)用,例如傳入兩個(gè)參數(shù),第一個(gè)是字符串2018-07-06,第二個(gè)是整數(shù)10,那么這兩個(gè)參數(shù)會(huì)被分別賦予date和amount變量,如果順序反過(guò)來(lái),則這兩個(gè)參數(shù)分別賦予amount和date變量。
關(guān)鍵字調(diào)用,可以忽略參數(shù)順序,直接指定參數(shù)。
僅限關(guān)鍵字參數(shù)
我們定義一個(gè)Person類(lèi),并實(shí)現(xiàn)它的__init__方法
當(dāng)初始化這個(gè)類(lèi)的時(shí)候,我們可以使用關(guān)鍵字調(diào)用,也可以使用位置調(diào)用。
對(duì)比上面兩種方式,我們會(huì)發(fā)現(xiàn)參數(shù)多的時(shí)候通過(guò)關(guān)鍵字指定參數(shù)不僅更加清晰,也更具有可讀性。如果我們希望函數(shù)只允許關(guān)鍵字調(diào)用,該如何做呢?Python 3.0中,引入了一種新的僅限關(guān)鍵字參數(shù),能實(shí)現(xiàn)我們的需求。
下面將age以后的參數(shù)修改為只允許關(guān)鍵字調(diào)用,定義函數(shù)時(shí)想指定僅限關(guān)鍵字參數(shù),要把它們放到前面有星號(hào)的參數(shù)后面,在Python中有星號(hào)的參數(shù)是可變參數(shù)的意思,如果不想支持可變參數(shù),可以在參數(shù)中放一個(gè)星號(hào)作為分割。
普通參數(shù)和僅限關(guān)鍵字參數(shù)中間由一個(gè)星號(hào)隔離開(kāi),星號(hào)以后的都是僅限關(guān)鍵字參數(shù),只可以通過(guò)關(guān)鍵字指定,而不能通過(guò)位置指定。
參數(shù)默認(rèn)值
在函數(shù)聲明時(shí),指定參數(shù)默認(rèn)值,調(diào)用時(shí)不傳入?yún)?shù)則使用默認(rèn)值,相當(dāng)于可選參數(shù)。
上面代碼中沒(méi)有傳入amount參數(shù),所以amount直接被置為默認(rèn)值0。有一點(diǎn)需要注意的是,默認(rèn)參數(shù)需要設(shè)置在必選參數(shù)后面,并且默認(rèn)參數(shù)既可以通過(guò)位置調(diào)用,也可以通過(guò)關(guān)鍵字調(diào)用。
參數(shù)默認(rèn)值既支持關(guān)鍵字參數(shù),也支持僅限關(guān)鍵字參數(shù)。
可變長(zhǎng)參數(shù)
“可變長(zhǎng)”顧名思義是允許在調(diào)用時(shí)傳入多個(gè)參數(shù),可變長(zhǎng)參數(shù)適用于參數(shù)數(shù)量不確定的場(chǎng)景,可變參數(shù)有兩種,一種是關(guān)鍵字可變長(zhǎng)參數(shù),另一種是非關(guān)鍵字可變長(zhǎng)參數(shù)。
非關(guān)鍵字可變長(zhǎng)參數(shù)的寫(xiě)法是在參數(shù)名前加一個(gè)星號(hào),Python會(huì)將這些多出來(lái)的參數(shù)的值放入一個(gè)元組中,由于元組中只有參數(shù)值而沒(méi)有參數(shù)名稱,所以是非關(guān)鍵字參數(shù)。
關(guān)鍵字可變長(zhǎng)參數(shù)的寫(xiě)法是在參數(shù)名前加兩個(gè)星號(hào),Python會(huì)將這些多出來(lái)的參數(shù)的值放入一個(gè)字典中,由于字典中只有參數(shù)值而沒(méi)有參數(shù)名稱,所以是關(guān)鍵字參數(shù)。
函數(shù)注解
Python 3中為函數(shù)定義增加的另一個(gè)新功能是函數(shù)注解,所謂函數(shù)注解,就是可以在函數(shù)參數(shù)和返回值上添加任意的元數(shù)據(jù)。
用create_person方法舉例,可以看到在每個(gè)參數(shù)后面都跟了一個(gè)參數(shù)類(lèi)型,在函數(shù)后面則是返回值類(lèi)型,函數(shù)注解可以用在文檔編寫(xiě)、類(lèi)型檢查中,在支持函數(shù)注解的IDE中,如果傳入?yún)?shù)和返回的類(lèi)型不符合函數(shù)注解中的類(lèi)型,IDE會(huì)提示錯(cuò)誤。
但是函數(shù)注解只是一個(gè)元數(shù)據(jù),Python解釋器執(zhí)行時(shí)候并不會(huì)去檢查類(lèi)型,所以下面這種情況也是合法的。
Person(name=123, age='John') # 并不會(huì)報(bào)錯(cuò)
總結(jié)
Python有著非常好入門(mén)的特點(diǎn),但是隨著語(yǔ)言本身的演進(jìn),很多高級(jí)功能也在持續(xù)加入,用好這些功能可以使我們的Python代碼擁有更高的可讀性,適應(yīng)更加復(fù)雜的應(yīng)用場(chǎng)景。返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mybatis if test 用法_S
- 下一篇: python单行箭头_python –