對于關(guān)鍵字參數(shù),函數(shù)的調(diào)用者可以傳入任意不受限制的關(guān)鍵字參數(shù)。至于到底傳入了哪些,就需要在函數(shù)內(nèi)部通過kw檢查。如果要限制關(guān)鍵字參數(shù)的名字,就可以用命名關(guān)鍵字參數(shù),例如,仍以person()函數(shù)為例,只接收city和job作為關(guān)鍵字參數(shù)。這種方式定義的函數(shù)如下:
1#和關(guān)鍵字參數(shù)**kw不同,命名關(guān)鍵字參數(shù)需要一個特殊分隔符*,*后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。
2defperson(name,age,*,city,job):
3print(name,age,city,job)
4
5#調(diào)用方式如下:
6>>>person('Jack',24,city='Beijing',job='Engineer')
7Jack24BeijingEngineer
8
9#如果函數(shù)定義中已經(jīng)有了一個可變參數(shù),后面跟著的命名關(guān)鍵字參數(shù)就不再需要一個特殊分隔符*了:
10defperson(name,age,*args,city,job):
11print(name,age,args,city,job)
12
13#命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名,這和位置參數(shù)不同。如果沒有傳入?yún)?shù)名,調(diào)用將報錯:
14>>>person('Jack',24,'Beijing','Engineer')
15Traceback(mostrecentcalllast):
16File"",line1,in
17TypeError:person()takes2positionalargumentsbut4weregiven
18#上面的錯誤說的是:由于調(diào)用時缺少參數(shù)名city和job,Python解釋器把這4個參數(shù)均視為位置參數(shù),但person()函數(shù)僅接受2個位置參數(shù)。
19
20
21#命名關(guān)鍵字參數(shù)可以有缺省值,從而簡化調(diào)用:
22defperson(name,age,*,city='Beijing',job):
23print(name,age,city,job)
24
25#由于命名關(guān)鍵字參數(shù)city具有默認(rèn)值,調(diào)用時,可不傳入city參數(shù):
26>>>person('Jack',24,job='Engineer')
27Jack24BeijingEngineer
使用命名關(guān)鍵字參數(shù)時,要特別注意,如果沒有可變參數(shù),就必須加一個*作為特殊分隔符。如果缺少*,Python解釋器將無法識別位置參數(shù)和命名關(guān)鍵字參數(shù):
1
2
3defperson(name,age,city,job):
#缺少*,city和job被視為位置參數(shù)
pass
以上內(nèi)容為大家介紹了python命名關(guān)鍵字參數(shù),希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。