Python的可變參數(shù)args與kwargs

對于初學者來說,固定參數(shù)的使用都會使用迟赃,這兩個參數(shù)不知道并不會影響寫代碼。其實很多時候Python的技巧在于厂镇,你懂得更多高級的語法會寫出更漂亮的代碼纤壁。可變參數(shù)有兩種:
1剪撬、args是任意參數(shù)
2摄乒、kwargs關(guān)鍵詞參數(shù)

Python的參數(shù)

一般情況下悠反,函數(shù)的形參是固定寫好的残黑,比如:

def hello(name, age):
    print "do something ..."
    print name, age

這樣的寫法似乎沒有問題,仔細思考會發(fā)現(xiàn)斋否,如果多層函數(shù)封裝好了梨水,突然接到BOSS的一個指令需要添加參數(shù),怎么辦茵臭?代碼如何擴展疫诽,于是代碼從最上層開始一直加到最底層嗎?解決的辦法就是每層封裝的時候添加可變參數(shù)旦委,用于擴展奇徒。

1、args

這個參數(shù)使用通常帶上一個星號*缨硝,直接看代碼:

def hello(*args):
    print "do something..."
    print args

>>> hello("Tom", "12")
do something...
('Tom', '12')

多個參數(shù)存儲在args的元組中摩钙,改變輸入?yún)?shù)的順序,元組中的args也會改變查辩。與上面的例子合起來一起:

def hello(name, age, *args):
    print "do something..."
    print name, age
    print args

>>> hello("Tom", "12")
do something...
Tom 12
()
>>> hello("Tom", "12", "Black")
do something...
Tom 12
('Black',)

如果只輸入兩個參數(shù)胖笛,那么可變參數(shù)args就是一個空元組。只要超過2個參數(shù)宜岛,多余的就會存儲在args元組中长踊,其實就這么簡單。

2萍倡、kwargs

這個可變參數(shù)是以關(guān)鍵詞參數(shù)形式輸入的身弊,先來看一個簡單例子:

def hello(**kwargs):
    print kwargs

>>>hello(name="Black")
{'name': 'black'}
>>> hello(name="Tom", age="22")
{'age': '22', 'name': 'Tom'}

當輸入不定個數(shù)的參數(shù)時,關(guān)鍵詞作為字典的key,參數(shù)作為值保存在kwargs中佑刷,現(xiàn)在明白了吧莉擒。當輸入?yún)?shù)是字典時會發(fā)生什么情況呢?

def hello(**kwargs):
    print kwargs

>>> d = dict(name="Tom", age=22)
>>>hello(**d)
{'age': '22', 'name': 'Tom'}

輸入完全一樣瘫絮,相當于直接輸出字典d涨冀,由此對于數(shù)據(jù)庫連接,日志配置一種簡單的情況就是配置成字典麦萤,然后直接傳入字典鹿鳖,代碼變得更加簡潔。(如果不明白壮莹,出門找數(shù)據(jù)庫操作翅帜,找不到就說明我還沒有更新)

3、混合參數(shù)
def hello(name, age, *args, **kwargs):
    print name, age
    print args
    print kwargs

>>>hello("Black", "22", "177", hobby="math")
Black 22
('177',)
{'hobby': 'math'}
>>>hello("Black", "22", length="177", hobby="math")
Black 22
()
{'hobby': 'math', 'length': '177'}
>>>hello(name="Black", age="22", length="177", hobby="math")
Black 22
()
{'hobby': 'math', 'length': '177'}

混合參數(shù)的輸入記住一個原則任意參數(shù)必須放在關(guān)鍵詞參數(shù)前面命满,hello(name="Black", age="22", "177", hobby="math")你本以為前兩個參數(shù)是定義好的涝滴,第三個參數(shù)會存儲到args元組中,最后一個參數(shù)會存儲kwargs的字典中胶台,這就錯了歼疮。

小結(jié)

對于可變參數(shù)有兩種

  • args 存儲任意參數(shù)
  • kwargs存儲關(guān)鍵詞參數(shù)
  • 任意參數(shù)一定要放在關(guān)鍵詞參數(shù)前面

思考
如果改變這兩個參數(shù)的名稱對結(jié)果會有影響嗎?

hello(name, age, *ag, **kw):
    print name, age
    print ag
    print kw
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诈唬,一起剝皮案震驚了整個濱河市韩脏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铸磅,老刑警劉巖赡矢,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阅仔,居然都是意外死亡吹散,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門八酒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來空民,“玉大人,你說我怎么就攤上這事丘跌∠埃” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵闭树,是天一觀的道長耸棒。 經(jīng)常有香客問我,道長报辱,這世上最難降的妖魔是什么与殃? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上幅疼,老公的妹妹穿的比我還像新娘米奸。我一直安慰自己,他們只是感情好爽篷,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布悴晰。 她就那樣靜靜地躺著,像睡著了一般逐工。 火紅的嫁衣襯著肌膚如雪铡溪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天泪喊,我揣著相機與錄音棕硫,去河邊找鬼。 笑死袒啼,一個胖子當著我的面吹牛哈扮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚓再,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滑肉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了对途?” 一聲冷哼從身側(cè)響起赦邻,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤髓棋,失蹤者是張志新(化名)和其女友劉穎实檀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體按声,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡膳犹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了签则。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片须床。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渐裂,靈堂內(nèi)的尸體忽然破棺而出豺旬,到底是詐尸還是另有隱情,我是刑警寧澤柒凉,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布族阅,位于F島的核電站,受9級特大地震影響膝捞,放射性物質(zhì)發(fā)生泄漏坦刀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲤遥。 院中可真熱鬧沐寺,春花似錦、人聲如沸盖奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钢坦。三九已至拔第,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間场钉,已是汗流浹背蚊俺。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逛万,地道東北人泳猬。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像宇植,于是被迫代替她去往敵國和親得封。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容