可變參數(shù)*args和關鍵字參數(shù)**kw和命名的關鍵字參數(shù)

可變參數(shù)指傳入的參數(shù)個數(shù)是可變的,可以是0個,1個翻具,2個...... 通過一個簡單加法例子來了解一下

def sum(*nums):
    type(nums)
    ret = 0
    for num in nums:
        ret += num
    print(ret)

sum(1, 2, 3, 4)
10

通過上面的例子我們可以看出悼嫉,可變參數(shù)傳入到函數(shù)內(nèi)部時就變成了一個元組艇潭。當然直接傳入列表也是可以實現(xiàn)可變參數(shù)的效果

def sum_list(num_list):
    ret = 0
    for num in num_list:
        ret += num
    print(ret)

num_list = [1, 2, 3, 4, 5]
sum_list(num_list)
15

在單獨使用而不是在函數(shù)參數(shù)定義中使用*會達到解包的效果,比如將一個列表傳給可變參數(shù)

sum(*num_list)
15

關鍵字參數(shù)允許向函數(shù)傳入個數(shù)可變的帶有參數(shù)名的參數(shù),可以是0個蹋凝,1個鲁纠,2個...... 通過一個例子了解一下

def student(stu_name, stu_age, stu_id, **kw):
    print('stu_name:', stu_name, 'stu_age:', stu_age, 'stu_id:', stu_id, 'other:', kw)

student('Tony', '22', '20180722', hometown='New York')
stu_name: Tony stu_age: 22 stu_id: 20180722 other: {'hometown': 'New York'}

函數(shù)內(nèi)部,kw已經(jīng)變成了一個dict類型了鳍寂。同樣改含,我們也可以給關鍵字參數(shù)傳入一個dict,但是同樣需要解包迄汛,但是**kw是拷貝到函數(shù)內(nèi)部捍壤,在函數(shù)內(nèi)部更改不會影響原先的dict

tony = {'hometown':'New York', 'phone':'11111111111'}
student('Tony', '22', '20180722', **tony)
stu_name: Tony stu_age: 22 stu_id: 20180722 other: {'hometown': 'New York', 'phone': '11111111111'}

當然,可以通過控制關鍵字參數(shù)的命名來限制調(diào)用者傳入的參數(shù)鞍爱,比如我們限制student()允許調(diào)用者傳入hometownphone參數(shù)鹃觉,但不允許其他的

def student(stu_name, stu_age, stu_id, *, hometown, phone):
    print(stu_name, stu_age, stu_id, hometown, phone)

student('Tony', '22', '20180722', hometown='New York', phone='11111111111')
#student('Tony', '22', '20180722', 'New York', '11111111111') #報錯
Tony 22 20180722 New York 11111111111

在定義命名的關鍵字參數(shù)時,需要使用*將命名的關鍵字參數(shù)和位置參數(shù)分開睹逃。命名的關鍵字參數(shù)在調(diào)用時必須也把參數(shù)名也寫上盗扇,不然會報錯TypeError: student() takes 3 positional arguments but 5 were given,意思也就是解釋器把你傳入的5個參數(shù)全部當成位置參數(shù)了沉填,而我們的函數(shù)定義時只有3個位置參數(shù)疗隶,后面的兩個是命名的關鍵字參數(shù)

python中定義函數(shù)時,有必須參數(shù)翼闹,默認參數(shù)斑鼻,可變參數(shù),關鍵字參數(shù)和命名關鍵字參數(shù)猎荠,5種參數(shù)除了可變參數(shù)和命名關鍵字參數(shù)外坚弱,其它的可以組合使用,但是要按照以上順序定義參數(shù)

def student(stu_name, stu_age=20, *, stu_id, **kw):
    print('stu_name:', stu_name, 'stu_age:', stu_age, 'stu_id:', stu_id, 'kw:', kw)

student('Tony', stu_id='20170722', hometown='New York', phone='11111111111')
student('Tony', 23, stu_id='20170722', hometown='New York', phone='11111111111')
kw = {'hometown': 'A City', 'phone':'22222222222'}
student('Tony', 24, stu_id='20170722', **kw)

def student(stu_name, stu_age=20, *args, **kw):
    print('stu_name:', stu_name, 'stu_age:', stu_age, 'args:', args, 'kw:', kw)

student('Tony', 'a', 'b', 'c', hometown='New York', phone='33333333333')
student('Tony', 25, 'a', 'b', 'c', hometown='New York', phone='33333333333')
args = ('a', 'b', 'c')
kw = {'hometown':'New York', 'phone':'44444444444'}
student('Tony', *args, **kw)
student('Tony', 26, *args, **kw)
stu_name: Tony stu_age: 20 stu_id: 20170722 kw: {'hometown': 'New York', 'phone': '11111111111'}
stu_name: Tony stu_age: 23 stu_id: 20170722 kw: {'hometown': 'New York', 'phone': '11111111111'}
stu_name: Tony stu_age: 24 stu_id: 20170722 kw: {'hometown': 'A City', 'phone': '22222222222'}
stu_name: Tony stu_age: a args: ('b', 'c') kw: {'hometown': 'New York', 'phone': '33333333333'}
stu_name: Tony stu_age: 25 args: ('a', 'b', 'c') kw: {'hometown': 'New York', 'phone': '33333333333'}
stu_name: Tony stu_age: a args: ('b', 'c') kw: {'hometown': 'New York', 'phone': '44444444444'}
stu_name: Tony stu_age: 26 args: ('a', 'b', 'c') kw: {'hometown': 'New York', 'phone': '44444444444'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末法牲,一起剝皮案震驚了整個濱河市史汗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拒垃,老刑警劉巖停撞,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悼瓮,居然都是意外死亡戈毒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門横堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埋市,“玉大人,你說我怎么就攤上這事命贴〉勒” “怎么了食听?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長污茵。 經(jīng)常有香客問我樱报,道長,這世上最難降的妖魔是什么泞当? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任迹蛤,我火速辦了婚禮,結(jié)果婚禮上襟士,老公的妹妹穿的比我還像新娘盗飒。我一直安慰自己,他們只是感情好陋桂,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布逆趣。 她就那樣靜靜地躺著,像睡著了一般章喉。 火紅的嫁衣襯著肌膚如雪汗贫。 梳的紋絲不亂的頭發(fā)上身坐,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天秸脱,我揣著相機與錄音,去河邊找鬼部蛇。 笑死摊唇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的涯鲁。 我是一名探鬼主播巷查,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抹腿!你這毒婦竟也來了岛请?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤警绩,失蹤者是張志新(化名)和其女友劉穎崇败,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩祥,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡后室,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了混狠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岸霹。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖将饺,靈堂內(nèi)的尸體忽然破棺而出贡避,到底是詐尸還是另有隱情痛黎,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布刮吧,位于F島的核電站舅逸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皇筛。R本人自食惡果不足惜琉历,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望水醋。 院中可真熱鬧旗笔,春花似錦、人聲如沸拄踪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惶桐。三九已至撮弧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姚糊,已是汗流浹背贿衍。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留救恨,地道東北人贸辈。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像肠槽,于是被迫代替她去往敵國和親擎淤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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

  • CentOS下安裝hadoop 用戶配置 添加用戶 權(quán)限配置 關閉防火墻 查看防火墻狀態(tài) 關閉防火墻 查看防火墻開...
    赤龍繞月閱讀 1,025評論 0 5
  • 記得六年前秸仙,一個煩躁的下午嘴拢,盤算著自己微薄的收入,暗暗且自負的嘲笑著對面只知道工作的老大哥寂纪。 我是個輕薄且自負的人...
    花哥哥閱讀 661評論 0 50
  • 文/蠻子慕白 當流星漫天落下的時候席吴,我本能的驚嘆于自然奇觀的壯美,然耳邊突傳來一句:“快弊攘,對著流星許愿抢腐,很靈”。瞬...
    蠻子慕白閱讀 390評論 0 1
  • 五月 漸漸有了夏天的味道 媽媽穿上了花裙子 牽著我的小手 裙擺飄揚 我已經(jīng)13個月了 努力在感知這個世界 春天 夏...
    Abby大陶子閱讀 200評論 0 1