Python——函數的命名關鍵字參數


命名關鍵字參數

對於關鍵字參數,函數的調用者可以傳入任意不受限制的關鍵字參數。至於到底傳入了哪些,就需要在函數內部通過kw檢查。

仍以person()函數為例,我們希望檢查是否有cityjob參數:

def person(name, age, **kw): if 'city' in kw: # 有city參數 pass if 'job' in kw: # 有job參數 pass print('name:', name, 'age:', age, 'other:', kw) 

但是調用者仍可以傳入不受限制的關鍵字參數:

>>> person('Jack', 24, city='Beijing', addr='Chaoyang', zipcode=123456) 

如果要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收cityjob作為關鍵字參數。這種方式定義的函數如下:

def person(name, age, *, city, job): print(name, age, city, job) 

和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符**后面的參數被視為命名關鍵字參數。

調用方式如下:

>>> person('Jack', 24, city='Beijing', job='Engineer') Jack 24 Beijing Engineer 

如果函數定義中已經有了一個可變參數,后面跟着的命名關鍵字參數就不再需要一個特殊分隔符*了:

def person(name, age, *args, city, job): print(name, age, args, city, job) 

命名關鍵字參數必須傳入參數名,這和位置參數不同。如果沒有傳入參數名,調用將報錯:

>>> person('Jack', 24, 'Beijing', 'Engineer')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module> TypeError: person() takes 2 positional arguments but 4 were given 

由於調用時缺少參數名cityjob,Python解釋器把這4個參數均視為位置參數,但person()函數僅接受2個位置參數。

命名關鍵字參數可以有缺省值,從而簡化調用:

def person(name, age, *, city='Beijing', job): print(name, age, city, job) 

由於命名關鍵字參數city具有默認值,調用時,可不傳入city參數:

>>> person('Jack', 24, job='Engineer') Jack 24 Beijing Engineer 

使用命名關鍵字參數時,要特別注意,如果沒有可變參數,就必須加一個*作為特殊分隔符。如果缺少*,Python解釋器將無法識別位置參數和命名關鍵字參數:

def person(name, age, city, job): # 缺少 *,city和job被視為位置參數 pass


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM