第十八章、參數(shù)

傳遞參數(shù)

①、參數(shù)的傳遞是通過(guò)自動(dòng)將對(duì)象賦值給本地變量名來(lái)實(shí)現(xiàn)的。

②、在函數(shù)內(nèi)部的參數(shù)名的賦值不會(huì)影響調(diào)用者。

③、改變函數(shù)的可變對(duì)象參數(shù)的值也許會(huì)對(duì)調(diào)用者有影響。

④、不可變參數(shù)“通過(guò)值”進(jìn)行傳遞。

⑤、可變對(duì)象是通過(guò)“指針”進(jìn)行傳遞的。

1、參數(shù)和共享引用:

對(duì)可變對(duì)象的在原處的修改會(huì)影響其他引用了該對(duì)象的變量。

2、避免可變參數(shù)的修改:

3、對(duì)參數(shù)輸出進(jìn)行模擬:

特定的參數(shù)匹配模式

1、基礎(chǔ)知識(shí):

①、位置:從左至右進(jìn)行匹配。

②、關(guān)鍵字參數(shù):通過(guò)參數(shù)名進(jìn)行匹配。

③、默認(rèn)參數(shù):為沒(méi)有傳入值的參數(shù)定義參數(shù)值。

④、可變參數(shù):收集任意多基于位置或關(guān)鍵字的參數(shù)。

⑤、可變參數(shù)解包:傳遞任意多的基于位置或關(guān)鍵字的參數(shù)。

⑥、Keyword-only參數(shù):參數(shù)必須按照名稱(chēng)傳遞。

2、匹配語(yǔ)法:

3、細(xì)節(jié):

如果決定適應(yīng)并混合特定的參數(shù)匹配模式,Python將會(huì)遵循下面有關(guān)順序的法則:

①、在函數(shù)調(diào)用中,參數(shù)必須以此順序出現(xiàn):任何位置參數(shù)(value),后面跟著任何關(guān)鍵字參數(shù)(name=value)和*sequence形式的組合,后面跟著**dict形式。

②、在函數(shù)頭部,參數(shù)必須以此順序出現(xiàn):任何一般參數(shù)(name),緊跟著任何默認(rèn)參數(shù)(name=value),如果有的話,后面是*name(或者在Python3.0中是*)的形式,后面跟著任何name或name=value keyword-only參數(shù)(在Python3.0中),后面跟著**name形式。

Python內(nèi)部是使用以下的步驟來(lái)在賦值前進(jìn)行參數(shù)匹配的:

①、通過(guò)位置分配非關(guān)鍵字參數(shù)。

②、通過(guò)匹配變量名分片關(guān)鍵字參數(shù)。

③、其他額外的非關(guān)鍵字參數(shù)分配到*name元組中。

④、其他額外的關(guān)鍵字參數(shù)分配到**name字典中。

⑤、用默認(rèn)值分配在頭部未得到分配的參數(shù)。

4、關(guān)鍵字參數(shù)和默認(rèn)參數(shù)實(shí)例:

①、關(guān)鍵字參數(shù):

在Python中,調(diào)用函數(shù)的時(shí)候,能夠更詳盡的定義內(nèi)容傳遞的位置。關(guān)鍵字參數(shù)允許通過(guò)變量名進(jìn)行匹配,而不是通過(guò)位置。

②、默認(rèn)參數(shù):

簡(jiǎn)而言之,默認(rèn)參數(shù)允許創(chuàng)建函數(shù)可選的參數(shù)。如果沒(méi)有傳入值的話,在函數(shù)運(yùn)行前,參數(shù)就被賦了默認(rèn)值。

③、關(guān)鍵字參數(shù)和默認(rèn)參數(shù)的混合:

5、任意參數(shù)的實(shí)例:

①、收集參數(shù):*/**在頭部,他意味著收集任意數(shù)量的參數(shù)。

②、解包參數(shù):*/**在調(diào)用時(shí),它解包任意數(shù)量的參數(shù)。

③、應(yīng)用函數(shù)通用性:

④、廢棄的apply內(nèi)置函數(shù)(Python2.6):

6、Python3.0 Keyword-Only參數(shù):

Python3.0把函數(shù)頭部的排序規(guī)則通用化了,運(yùn)行我們指定keyword-only參數(shù)——即必須只按照關(guān)鍵字傳遞并且不會(huì)由一個(gè)位置參數(shù)來(lái)填充的參數(shù)。

①、排序規(guī)則:

注意keyword-only參數(shù)必須在一個(gè)單個(gè)星號(hào)后面指定,而不是兩個(gè)星號(hào)——命名的參數(shù)不能出現(xiàn)在**args任意關(guān)鍵字形式的后面,并且一個(gè)**不能獨(dú)自出現(xiàn)在參數(shù)列表中。

在一個(gè)函數(shù)頭部,keyword-only參數(shù)必須編寫(xiě)在**args任意關(guān)鍵字形式之前,且在*args任意位置形式之后,當(dāng)二者都有的時(shí)候。無(wú)論何時(shí),一個(gè)參數(shù)名稱(chēng)出現(xiàn)在*args之前,它可能是默認(rèn)位置參數(shù),而不是keyword-only參數(shù)。

keyword-only參數(shù)可以編寫(xiě)在*args之前或者之后,并且可能包含在**args中。

②、為何使用keyword-only參數(shù):

簡(jiǎn)而言之,它們使得很容易允許一個(gè)函數(shù)既接受任意多個(gè)要處理的位置參數(shù),也接受作為關(guān)鍵字傳遞的配置選項(xiàng)。

7、min調(diào)用:

8、滿分:

9、加分點(diǎn):

10、結(jié)論:

一個(gè)更有用的例子:通用set函數(shù)

模擬Python3.0 print函數(shù)

1、使用Keyword-Only參數(shù):

本章小結(jié)

在本章中,我們學(xué)習(xí)了與函數(shù)相關(guān)的兩個(gè)關(guān)鍵概念中的第二個(gè):參數(shù)(對(duì)象如何傳遞給函數(shù))。正如我們所學(xué)到的,參數(shù)通過(guò)賦值傳遞到函數(shù)中,賦值方式是通過(guò)對(duì)象引用,實(shí)際上是通過(guò)指針傳遞到函數(shù)中。我們還學(xué)習(xí)了一些更高級(jí)的擴(kuò)展,包括默認(rèn)參數(shù)和關(guān)鍵字參數(shù)、使用任意的多個(gè)參數(shù)的工具,以及Python3.0中的關(guān)鍵字參數(shù)。最后,我們還學(xué)習(xí)了可變參數(shù)如何表現(xiàn)出與其他的對(duì)象共享引用一樣的行為——除非對(duì)象在發(fā)送進(jìn)來(lái)的時(shí)候顯式地復(fù)制,在一個(gè)函數(shù)中修改一個(gè)傳入的可變對(duì)象可能會(huì)影響調(diào)用者。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容