函數(shù)的參數(shù):
關(guān)鍵詞:必選參數(shù)妒潭、默認參數(shù)(a=b)焙蹭、可變參數(shù)(*args)、關(guān)鍵字參數(shù)(**kw)次泽、命名關(guān)鍵字參數(shù)(, *,)
定義函數(shù)的時候穿仪,我們把參數(shù)的名字和位置確定下來席爽,函數(shù)的接口定義就完成了意荤。對于函數(shù)的調(diào)用者來說,只需要知道如何傳遞正確的參數(shù)只锻,以及函數(shù)將返回什么樣的值就夠了玖像,函數(shù)內(nèi)部的復(fù)雜邏輯被封裝起來,調(diào)用者無需了解齐饮。
函數(shù)的參數(shù)可以是:整形捐寥、浮點型、字符串祖驱、list握恳、tuple、dict
默認參數(shù):默認參數(shù)可以簡化函數(shù)的調(diào)用捺僻。
設(shè)置默認參數(shù)需要注意:
一是必選參數(shù)在前乡洼,默認參數(shù)在后,否則Python的解釋器會報錯
二是如何設(shè)置默認參數(shù)匕坯?當函數(shù)有多個參數(shù)時束昵,把變化大的參數(shù)放前面,變化小的參數(shù)放后面葛峻。變化小的參數(shù)就可以作為默認參數(shù)锹雏。
默認參數(shù)必須指向不變對象!
可變參數(shù):
詳情咨詢:
http://www.cnblogs.com/elyw/p/python_note_func_args.html
假如說參數(shù)個數(shù)不確定的情況下术奖,可以用list礁遵、tuple傳參
也可以用可變參數(shù)傳參,可變參數(shù):*args采记,這樣佣耐,在調(diào)用時,就可以調(diào)用多個參數(shù)
args可以是其他定義的參數(shù)名挺庞,但是*是必須要添加在前面的晰赞,比如也可以定義參數(shù)為 *numbers
number在函數(shù)內(nèi)部以數(shù)組或元祖的形式存在
關(guān)鍵字參數(shù):
可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple选侨。而關(guān)鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù)掖鱼,這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict。
定義一個person函數(shù):
功能:以擴展函數(shù)的功能援制。
比如戏挡,在person函數(shù)里,我們保證能接收到name和age這兩個參數(shù)晨仑,但是褐墅,如果調(diào)用者愿意提供更多的參數(shù)拆檬,我們也能收到。試想你正在做一個用戶注冊的功能妥凳,除了用戶名和年齡是必填項外竟贯,其他都是可選項,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求逝钥。
和可變參數(shù)類似屑那,也可以先組裝出一個dict,然后艘款,把該dict轉(zhuǎn)換為關(guān)鍵字參數(shù)傳進去持际。
命名關(guān)鍵字參數(shù):
如果要限制關(guān)鍵字參數(shù)的名字,就可以用命名關(guān)鍵字參數(shù)哗咆。
作用:就是只接收特定的關(guān)鍵字
使用方法:關(guān)鍵字參數(shù)**kw不同蜘欲,命名關(guān)鍵字參數(shù)需要一個特殊分隔符*,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)晌柬。假如函數(shù)中定義有可變參數(shù)姥份,命名關(guān)鍵字參數(shù)就不需要添加特殊分隔符*了。調(diào)用的時候必須在參數(shù)里添加關(guān)鍵字(key = value)
參數(shù)組合:(重點)
在Python中定義函數(shù)空繁,可以用必選參數(shù)装哆、默認參數(shù)乒省、可變參數(shù)罐韩、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)夷蚊,這5種參數(shù)都可以組合使用。
參數(shù)定義的順序必須是:必選參數(shù)>默認參數(shù)>可變參數(shù)>命名關(guān)鍵字參數(shù)>關(guān)鍵字參數(shù)傲诵。
小結(jié):
Python的函數(shù)具有非常靈活的參數(shù)形態(tài)凯砍,既可以實現(xiàn)簡單的調(diào)用,又可以傳入非常復(fù)雜的參數(shù)拴竹。
默認參數(shù)一定要用不可變對象悟衩,如果是可變對象,程序運行時會有邏輯錯誤栓拜!
要注意定義可變參數(shù)和關(guān)鍵字參數(shù)的語法:
*args是可變參數(shù)座泳,args接收的是一個tuple;
**kw是關(guān)鍵字參數(shù)幕与,kw接收的是一個dict挑势。
以及調(diào)用函數(shù)時如何傳入可變參數(shù)和關(guān)鍵字參數(shù)的語法:
可變參數(shù)既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple啦鸣,再通過*args傳入:func(*(1, 2, 3))潮饱;
關(guān)鍵字參數(shù)既可以直接傳入:func(a=1, b=2),又可以先組裝dict诫给,再通過**kw傳入:func(**{'a': 1, 'b': 2})香拉。
使用*args和**kw是Python的習(xí)慣寫法啦扬,當然也可以用其他參數(shù)名,但最好使用習(xí)慣用法凫碌。
命名的關(guān)鍵字參數(shù)是為了限制調(diào)用者可以傳入的參數(shù)名扑毡,同時可以提供默認值。
定義命名的關(guān)鍵字參數(shù)在沒有可變參數(shù)的情況下不要忘了寫分隔符*证鸥,否則定義的將是位置參數(shù)僚楞。