Python中的*args和**kwargs

在Python中的代碼中經常會見到這兩個詞 args 和 kwargs,前面通常還會加上一個或者兩個星號晋南。其實這只是編程人員約定的變量名字役听,args 是 arguments 的縮寫吓歇,表示位置參數;kwargs 是 keyword arguments 的縮寫尊浪,表示關鍵字參數匣屡。這其實就是 Python 中可變參數的兩種形式,并且 *args 必須放在 **kwargs 的前面拇涤,因為位置參數在關鍵字參數的前面捣作。

*args的用法

*args就是就是傳遞一個可變參數列表給函數實參,這個參數列表的數目未知鹅士,甚至長度可以為0券躁。下面這段代碼演示了如何使用args

def test_args(first, *args):
    print('Required argument: ', first)
    print(type(args))
    for v in args:
        print ('Optional argument: ', v)

test_args(1, 2, 3, 4)

第一個參數是必須要傳入的參數,所以使用了第一個形參掉盅,而后面三個參數則作為可變參數列表傳入了實參也拜,并且是作為元組tuple來使用的。代碼的運行結果如下

Required argument:  1
<class 'tuple'>
Optional argument:  2
Optional argument:  3
Optional argument:  4

**kwargs

而**kwargs則是將一個可變的關鍵字參數的字典傳給函數實參趾痘,同樣參數列表長度可以為0或為其他值慢哈。下面這段代碼演示了如何使用kwargs

def test_kwargs(first, *args, **kwargs):
   print('Required argument: ', first)
   print(type(kwargs))
   for v in args:
      print ('Optional argument (args): ', v)
   for k, v in kwargs.items():
      print ('Optional argument %s (kwargs): %s' % (k, v))

test_kwargs(1, 2, 3, 4, k1=5, k2=6)

正如前面所說的,args類型是一個tuple永票,而kwargs則是一個字典dict岸军,并且args只能位于kwargs的前面。代碼的運行結果如下

Required argument:  1
<class 'dict'>
Optional argument (args):  2
Optional argument (args):  3
Optional argument (args):  4
Optional argument k2 (kwargs): 6
Optional argument k1 (kwargs): 5

調用函數

args和kwargs不僅可以在函數定義中使用瓦侮,還可以在函數調用中使用。在調用時使用就相當于pack(打包)和unpack(解包)佣谐,類似于元組的打包和解包肚吏。

首先來看一下使用args來解包調用函數的代碼,

def test_args_kwargs(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)

args = ("two", 3, 5)
test_args_kwargs(*args)

#result:
arg1: two
arg2: 3
arg3: 5

將元組解包后傳給對應的實參狭魂,kwargs的用法與其類似罚攀。

kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test_args_kwargs(**kwargs)

#result
arg1: 5
arg2: two
arg3: 3

args和kwargs組合起來可以傳入任意的參數,這在參數未知的情況下是很有效的雌澄,同時加強了函數的可拓展性斋泄。

歡迎大家關注公眾號“計算機視覺與機器學習”


計算機視覺和機器學習
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市镐牺,隨后出現(xiàn)的幾起案子炫掐,更是在濱河造成了極大的恐慌,老刑警劉巖睬涧,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件募胃,死亡現(xiàn)場離奇詭異旗唁,居然都是意外死亡,警方通過查閱死者的電腦和手機痹束,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門检疫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祷嘶,你說我怎么就攤上這事屎媳。” “怎么了论巍?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵烛谊,是天一觀的道長。 經常有香客問我环壤,道長晒来,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任郑现,我火速辦了婚禮湃崩,結果婚禮上,老公的妹妹穿的比我還像新娘接箫。我一直安慰自己攒读,他們只是感情好,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布辛友。 她就那樣靜靜地躺著薄扁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪废累。 梳的紋絲不亂的頭發(fā)上邓梅,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音邑滨,去河邊找鬼日缨。 笑死,一個胖子當著我的面吹牛掖看,可吹牛的內容都是我干的匣距。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼哎壳,長吁一口氣:“原來是場噩夢啊……” “哼毅待!你這毒婦竟也來了?” 一聲冷哼從身側響起归榕,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤尸红,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體驶乾,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡邑飒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了级乐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疙咸。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖风科,靈堂內的尸體忽然破棺而出撒轮,到底是詐尸還是另有隱情,我是刑警寧澤贼穆,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布题山,位于F島的核電站,受9級特大地震影響故痊,放射性物質發(fā)生泄漏顶瞳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一愕秫、第九天 我趴在偏房一處隱蔽的房頂上張望慨菱。 院中可真熱鬧,春花似錦戴甩、人聲如沸符喝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽协饲。三九已至闷愤,卻和暖如春立莉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卿吐。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工把夸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留而线,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓扎即,卻偏偏與公主長得像,于是被迫代替她去往敵國和親况凉。 傳聞我的和親對象是個殘疾皇子谚鄙,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容

  • 前幾天突然發(fā)現(xiàn)自己對 *args 和 **kwargs 存在一些困惑,幾本書上寫的各有側重刁绒。這里把自己整理的一些筆...
    Aaron_SR閱讀 3,456評論 0 4
  • 〇闷营、前言 本文共108張圖,流量黨請慎重! 歷時1個半月傻盟,我把自己學習Python基礎知識的框架詳細梳理了一遍速蕊。 ...
    Raxxie閱讀 18,934評論 17 410
  • 今日體驗:最近不是很忙 沒事的時候看一個理論 理論很重要 懂了理論修車才容易!
    酷酷的峰666閱讀 176評論 0 0
  • 我們知道訪問一個對象的屬性的時候娘赴,我們使用.或者[]來訪問规哲。比如: 這樣,如果我們要訪問某個對象的每個屬性的時候诽表,...
    自律財富自由閱讀 214評論 0 0
  • 2035年元旦的清晨 我站在梳妝臺前整理著頭發(fā) “魔鏡啊魔鏡唉锌,誰是世界上最美麗的女人?” “當然是您了竿奏,我的主人袄简!...
    四姐和悅女王閱讀 360評論 0 2