亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

這里為什么需要定義k,v兩個?另外還有關于**arg和*kw的區別

如題,前面調用任意參數是**arg和*kw,這里為什么是*kw,關鍵還不用*這個符號??誰解釋下,謝謝

正在回答

5 回答

#先說一下*和**的區別,最好還是結合例子來說明用途
#比如我們定義了以下的函數
#它的輸入參數一共有4個,其中x,y是可以缺省的

In?[1]:?def?f(a,b,x=10,y=20):?
???...:?????return?a+b+x+y
???...:

In?[2]:?f(1,2,x=3,y=4)
Out[2]:?10

#先看看**的用法,比如,我有一個dict變量kw
#它的元素剛好和我上面定義的函數的缺省部分有一樣的
#命名,這時候為了調用函數f,我可以采用比較笨的辦法,如
#f(1,2,kw['x'],kw['y']),也可以采用python的一種比較聰明的
#方法,就是把一個dict化成一排key-value對。這種方法就要用到兩個**

In?[3]:?kw={'x':3,'y':4}

In?[4]:?kw
Out[4]:?{'x':?3,?'y':?4}

#比如,這樣
In?[5]:?f(1,2,**kw)
Out[5]:?10

#一個*用法的出現也跟上面將的差不多,
#它就是把一個list,tuple化成一排輸入的簡寫
In?[6]:?arg=(1,2)

In?[7]:?f(*arg,x=3,y=4)
Out[7]:?10

#希望看到這里你應該能明白了
In?[8]:?f(*arg,**kw)
Out[8]:?10

#?-------------------------------
class?Person(object):
????def?__init__(self,?name,?gender,?birth,?**kw):
????????self.name?=?name
????????self.gender?=?gender
????????self.birth?=?birth
????????#kw是一個dict,它的iteritems返回key-value對組成的
????????#tuple,?所以這里要用k,v來接受key和value
????????for?k,?v?in?kw.iteritems():
????????????setattr(self,?k,?v)
13 回復 有任何疑惑可以回復我~
#1

學習攻城獅 提問者

非常感謝!
2015-05-05 回復 有任何疑惑可以回復我~
#2

學習攻城獅 提問者

非常感謝。
2015-05-05 回復 有任何疑惑可以回復我~

之前在困惑為什么用**kw而不用*agrs,現在懂了,就是因為在創建實例的時候,未知的屬性既要輸入屬性名又要為這個未知屬性賦值,所以是要k=v的格式,于是就是**kw而不是*agrs了。

0 回復 有任何疑惑可以回復我~

贊!贊!贊!

0 回復 有任何疑惑可以回復我~

這個必須贊一個,學的很扎實呀

0 回復 有任何疑惑可以回復我~

解釋的很到位

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

這里為什么需要定義k,v兩個?另外還有關于**arg和*kw的區別

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號