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

對(duì)于初學(xué)者來說,固定參數(shù)的使用都會(huì)使用,這兩個(gè)參數(shù)不知道并不會(huì)影響寫代碼高每。其實(shí)很多時(shí)候Python的技巧在于,你懂得更多高級(jí)的語(yǔ)法會(huì)寫出更漂亮的代碼南捂⌒粒可變參數(shù)有兩種:
1夯膀、args是任意參數(shù)
2诗充、kwargs關(guān)鍵詞參數(shù)

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

def hello(name, age):
print "do something ..."
print name, age
這樣的寫法似乎沒有問題,仔細(xì)思考會(huì)發(fā)現(xiàn),如果多層函數(shù)封裝好了,突然接到BOSS的一個(gè)指令需要添加參數(shù),怎么辦?代碼如何擴(kuò)展,于是代碼從最上層開始一直加到最底層嗎?解決的辦法就是每層封裝的時(shí)候添加可變參數(shù),用于擴(kuò)展。

1诱建、args
這個(gè)參數(shù)使用通常帶上一個(gè)星號(hào)*,直接看代碼:

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

hello("Tom", "12")
do something...
('Tom', '12')
多個(gè)參數(shù)存儲(chǔ)在args的元組中,改變輸入?yún)?shù)的順序,元組中的args也會(huì)改變蝴蜓。與上面的例子合起來一起:

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',)
如果只輸入兩個(gè)參數(shù),那么可變參數(shù)args就是一個(gè)空元組。只要超過2個(gè)參數(shù),多余的就會(huì)存儲(chǔ)在args元組中,其實(shí)就這么簡(jiǎn)單俺猿。

2茎匠、kwargs
這個(gè)可變參數(shù)是以關(guān)鍵詞參數(shù)形式輸入的,先來看一個(gè)簡(jiǎn)單例子:

def hello(**kwargs):
print kwargs

hello(name="Black")
{'name': 'black'}
hello(name="Tom", age="22")
{'age': '22', 'name': 'Tom'}
當(dāng)輸入不定個(gè)數(shù)的參數(shù)時(shí),關(guān)鍵詞作為字典的key,參數(shù)作為值保存在kwargs中,現(xiàn)在明白了吧。當(dāng)輸入?yún)?shù)是字典時(shí)會(huì)發(fā)生什么情況呢?

def hello(**kwargs):
print kwargs

d = dict(name="Tom", age=22)
hello(**d)
{'age': '22', 'name': 'Tom'}
輸入完全一樣,相當(dāng)于直接輸出字典d,由此對(duì)于數(shù)據(jù)庫(kù)連接,日志配置一種簡(jiǎn)單的情況就是配置成字典,然后直接傳入字典,代碼變得更加簡(jiǎn)潔押袍。(如果不明白,出門找數(shù)據(jù)庫(kù)操作,找不到就說明我還沒有更新)

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ù)的輸入記住一個(gè)原則任意參數(shù)必須放在關(guān)鍵詞參數(shù)前面,hello(name="Black", age="22", "177", hobby="math")你本以為前兩個(gè)參數(shù)是定義好的,第三個(gè)參數(shù)會(huì)存儲(chǔ)到args元組中,最后一個(gè)參數(shù)會(huì)存儲(chǔ)kwargs的字典中,這就錯(cuò)了。

小結(jié)
對(duì)于可變參數(shù)有兩種

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谊惭,一起剝皮案震驚了整個(gè)濱河市汽馋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌圈盔,老刑警劉巖豹芯,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驱敲,居然都是意外死亡铁蹈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門众眨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來握牧,“玉大人,你說我怎么就攤上這事娩梨⊙匮” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵姚建,是天一觀的道長(zhǎng)矫俺。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么厘托? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任友雳,我火速辦了婚禮,結(jié)果婚禮上铅匹,老公的妹妹穿的比我還像新娘押赊。我一直安慰自己,他們只是感情好包斑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布流礁。 她就那樣靜靜地躺著,像睡著了一般罗丰。 火紅的嫁衣襯著肌膚如雪神帅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天萌抵,我揣著相機(jī)與錄音找御,去河邊找鬼。 笑死绍填,一個(gè)胖子當(dāng)著我的面吹牛霎桅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讨永,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼滔驶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了卿闹?” 一聲冷哼從身側(cè)響起揭糕,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎比原,沒想到半個(gè)月后插佛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杠巡,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡量窘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氢拥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚌铜。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嫩海,靈堂內(nèi)的尸體忽然破棺而出冬殃,到底是詐尸還是另有隱情,我是刑警寧澤叁怪,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布审葬,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涣觉。R本人自食惡果不足惜痴荐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望官册。 院中可真熱鬧生兆,春花似錦、人聲如沸膝宁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)员淫。三九已至合蔽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間介返,已是汗流浹背辈末。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留映皆,地道東北人挤聘。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捅彻,于是被迫代替她去往敵國(guó)和親组去。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 對(duì)于初學(xué)者來說步淹,固定參數(shù)的使用都會(huì)使用从隆,這兩個(gè)參數(shù)不知道并不會(huì)影響寫代碼。其實(shí)很多時(shí)候Python的技巧在于缭裆,你懂...
    Black先森閱讀 817評(píng)論 0 0
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,451評(píng)論 0 13
  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的<搿! 因?yàn)镾cala是基于Java虛擬機(jī)澈驼,也就是...
    燈火gg閱讀 3,440評(píng)論 1 24
  • 一辛燥、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,813評(píng)論 2 16
  • 醒來,讀書缝其,寫長(zhǎng)長(zhǎng)的信在崎嶇的小路上不停地徘徊寒風(fēng)凜冽挎塌,有陽(yáng)光,積雪仍在踩上去内边,發(fā)出嘎吱嘎吱的聲響驚嚇了潛藏的野山...
    布瓜先生閱讀 223評(píng)論 1 6