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

對(duì)于初學(xué)者來(lái)說(shuō),固定參數(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
這樣的寫法似乎沒(méi)有問(wèn)題,仔細(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ì)改變。與上面的例子合起來(lái)一起:

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è)空元組。只要超過(guò)2個(gè)參數(shù),多余的就會(huì)存儲(chǔ)在args元組中,其實(shí)就這么簡(jiǎn)單。

2、kwargs
這個(gè)可變參數(shù)是以關(guān)鍵詞參數(shù)形式輸入的,先來(lái)看一個(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ù)操作,找不到就說(shuō)明我還沒(méi)有更新)

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容