python中函數(shù)的可變參數(shù)和關鍵字參數(shù)簡記

上面文章1,上面文章2所講,python中的函數(shù)最常用的參數(shù)形式有位置參數(shù)和默認參數(shù),但還有一些比較實用的參數(shù)形式,比如本文中講到的可變參數(shù)和關鍵字參數(shù)??勺儏?shù)和關鍵字參數(shù)在定義和使用時的形式很相似很規(guī)整,所以本文對這兩個類型的參數(shù)做一個介紹和對比。

一:可變參數(shù)

在python函數(shù)中,還可以定義可變參數(shù)??勺儏?shù)是指傳入的參數(shù)個數(shù)可變,可以是一個,兩個或者多個,也可以是0個,形式如下:

def calc(*numbers):
    sums = 0
    for num in numbers:
        sums += num
    return sums

可以看到,定義一個可變參數(shù)和定義一個list或者tuple參數(shù)相比,前面多了一個星號。而函數(shù)調用方可以傳入0個到多個參數(shù)。在函數(shù)內部,參數(shù)numbers接收到的是一個tuple,所以函數(shù)代碼相比較傳入一個list或者tuple參數(shù)的函數(shù)來說,代碼是一樣的。

小問題:如果現(xiàn)在已經有一個list或者tuple變量想傳給可變函數(shù)作為參數(shù)怎么辦,難道還要手動打散再傳過來嗎?不用。靈活的python運行將list或者tuple直接作為參數(shù)傳過來,只需要在list或者tuple前面加一個*號即可:

res1 = calc(1,2,3) #傳入多個參數(shù)
res2 = calc(*[1,2,3])  #傳入一個list
res3 = calc(*(1,2,3))  #傳入一個tuple

print(res1) #結果為6
print(res2) #結果為6
print(res3) #結果為6

這種把list或者tuple直接傳進去作為多個可變參數(shù)的寫法非常有用,且很常見。

二:關鍵字參數(shù)

可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調用時自動組裝為一個tuple。而關鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關鍵字參數(shù)在函數(shù)內部自動組裝為一個dict。請看示例:

def person(name, age, **kw):
    print('name is :', name, 'age is :', age, 'other is :',kw)

person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, gender='M', job='Engineer')

運行結果:

E:\python_study>python 1.py
('name is :', 'Michael', 'age is :', 30, 'other is :', {})
('name is :', 'Bob', 'age is :', 35, 'other is :', {'city': 'Beijing'})
('name is :', 'Adam', 'age is :', 45, 'other is :', {'gender': 'M', 'job': 'Engineer'})

可以看到,關鍵字參數(shù)kw前面帶兩個星號,可變參數(shù)前面是帶一個星號。

同樣的問題:如果現(xiàn)在已經有一個dict想傳給函數(shù)作為關鍵字參數(shù)怎么辦,難道還要手動打散再傳過來嗎?不用。靈活的python運行將dict直接作為參數(shù)傳過來,只需要在dict前面加兩個星號即可:

extra = {'city':'Beijing', 'job':'Engineer'}
person('Jack', 24, **extra)

運行結果同樣為:

E:\python_study>python 1.py
('name is :', 'Jack', 'age is :', 24, 'other is :', {'city': 'Beijing', 'job': 'Engineer'})

關鍵字參數(shù)有什么用?它可以擴展函數(shù)的功能。比如,在person函數(shù)里,我們保證能接收到name和age這兩個參數(shù),但是,如果調用者愿意提供更多的參數(shù),我們也能收到。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。

本文主要是對python中函數(shù)的可變參數(shù)和關鍵字參數(shù)的定義,用法做一個對比。python中函數(shù)的參數(shù)當然還有其他的特性,比如限制命名關鍵字參數(shù)等用法,再次不贅述。

參考:
函數(shù)的參數(shù)

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容