'''
位置參數(shù):
位置形參:函數(shù)定義時(shí),從左往右寫(xiě)的參數(shù)
位置實(shí)參:函數(shù)調(diào)用時(shí),從左往右寫(xiě)的參數(shù)
'''
def func(a, b):
print(a, b)
func(1, 2)
# 1, 2
'''
關(guān)鍵參數(shù):
正常情況下,給函數(shù)傳參數(shù),要按順序。如果不想按順序,就用關(guān)鍵參數(shù)。
指定參數(shù)名的參數(shù),就叫做關(guān)鍵參數(shù)。
函數(shù)調(diào)用時(shí):func(a=1, b=2), 這種指定了參數(shù)名的參數(shù),就是關(guān)鍵參數(shù)。
調(diào)用函數(shù)時(shí),關(guān)鍵參數(shù)可以和位置參數(shù)一起用,但是關(guān)鍵參數(shù)必須在位置參數(shù)的后面。不然會(huì)報(bào)錯(cuò)。
利用關(guān)鍵字傳參的是時(shí)候,要么全部參數(shù)都用關(guān)鍵字傳參,要么就必須按照順序
'''
def func1(a, b, c):
print(a, b, c)
func1(10, 20, c=30)
# 10, 20, 30
'''
默認(rèn)參數(shù):
函數(shù)定義時(shí),默認(rèn)參數(shù)必須在位置形參的后面。
函數(shù)調(diào)用時(shí),指定參數(shù)名的參數(shù),叫關(guān)鍵參數(shù)。
而在函數(shù)定義時(shí),給參數(shù)名指定值的時(shí)候,這個(gè)參數(shù)叫做默認(rèn)參數(shù)。
關(guān)鍵參數(shù),和默認(rèn)參數(shù)兩個(gè)參數(shù)寫(xiě)法一樣,區(qū)別在于:
關(guān)鍵參數(shù)是在函數(shù)調(diào)用時(shí),指定實(shí)參的參數(shù)名,也可以說(shuō)指定值的參數(shù)名。
默認(rèn)參數(shù)是在函數(shù)定義時(shí),指定參數(shù)名的值。
'''
def func2(a, b, c=30):
print(a, b, c)
func2(10, 20, 40)
# 10, 20, 40
'''
動(dòng)態(tài)參數(shù):*args **kwargs
*args
針對(duì)函數(shù)定義時(shí)的*:
def func(a, b, *args):
pass
*args會(huì)接收函數(shù)調(diào)用時(shí),傳入的多余的位置實(shí)參。
*args 是一個(gè)元組
*kwargs
針對(duì)函數(shù)定義時(shí),站在形參的角度看 **
接收多余的關(guān)鍵實(shí)參,成為一個(gè)字典dict。
字典的key是關(guān)鍵實(shí)參的變量名,字典的value是關(guān)鍵實(shí)參的值。
將字典交給**后面的變量名,這里是kwargs
'''
def func3(a, b, *args):
print(a, b, args)
func3(10, 20, 30, 40)
# 10, 20, (30, 40)
'''
函數(shù)定義時(shí):
從左往右:位置形參 > *args > 默認(rèn)參數(shù) > **kwargs
位置形參 > 默認(rèn)參數(shù) > *args > **kwargs 也可以。
因?yàn)楹瘮?shù)調(diào)用時(shí)給的實(shí)參滿足了位置形參、默認(rèn)參數(shù)之后,會(huì)把多余的位置實(shí)參給args。這樣并不會(huì)報(bào)錯(cuò)。
但是 **kwargs 必須在 *args后面
默認(rèn)形參必須在位置形參后面
函數(shù)調(diào)用時(shí):
從左往右:位置實(shí)參 > *args > 關(guān)鍵參數(shù) > **kwargs
因?yàn)?*args 在函數(shù)調(diào)用時(shí),會(huì)被打散成位置實(shí)參,而關(guān)鍵參數(shù)必須在位置實(shí)參的后面,否則會(huì)報(bào)錯(cuò)。SyntaxError: positional argument follows keyword argument
*args 必須在 **kwargs后面, 否則會(huì)報(bào)語(yǔ)法錯(cuò)誤:SyntaxError: iterable argument unpacking follows keyword argument unpacking
注意:用了*之后,*后面的參數(shù)必須以關(guān)鍵字傳參,并且用了*之后,不能再接收不定個(gè)數(shù)的位置參數(shù)。
'''
def func4(a, b, c=10, *args, **kwargs):
print(a, b, c, args, kwargs)
func4(10, 20, 30, e=100)
# 10,20,30,(),{'e':100}
def func5(a, b, *args, c=30, **kwargs):
print(a, b, c, args, kwargs)
func5(10, 20, 30, e=100)
# 10,20,30,(30,),{'e':100}
def func6(a, b, *, c=10, d=30, **kwargs):
print(a, b, c, d, kwargs)
func6(10, 20)
# 10,20,10,30,{}
函數(shù)的參數(shù)問(wèn)題
?著作權(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ù)。
【社區(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)容
- 這是一個(gè)有意思的問(wèn)題,當(dāng)時(shí)我是在處理函數(shù)的柯里化,突然發(fā)現(xiàn)了Swift的柯里化函數(shù)庫(kù)(Curry)中的函數(shù)參數(shù)與我...
- 第一組:劉聰 This關(guān)鍵詞的四種用法 this代表當(dāng)前類(lèi)的實(shí)例對(duì)象 用this串聯(lián)構(gòu)造函數(shù) 原始類(lèi)型擴(kuò)展方法 ...
- 有種溫度,人走茶涼 有種溫度,曲終人散 有種溫度。冷時(shí)如冰 有種溫度,熱時(shí)如火 花開(kāi)時(shí),陽(yáng)光的溫度 云散了,天空的...