課程
/后端開發
/Python
/python進階
如題,前面調用任意參數是**arg和*kw,這里為什么是*kw,關鍵還不用*這個符號??誰解釋下,謝謝
2015-05-04
源自:python進階 4-4
正在回答
#先說一下*和**的區別,最好還是結合例子來說明用途 #比如我們定義了以下的函數 #它的輸入參數一共有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)
學習攻城獅 提問者
之前在困惑為什么用**kw而不用*agrs,現在懂了,就是因為在創建實例的時候,未知的屬性既要輸入屬性名又要為這個未知屬性賦值,所以是要k=v的格式,于是就是**kw而不是*agrs了。
贊!贊!贊!
這個必須贊一個,學的很扎實呀
解釋的很到位
舉報
學習函數式、模塊和面向對象編程,掌握Python高級程序設計
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-05-04
2015-06-23
之前在困惑為什么用**kw而不用*agrs,現在懂了,就是因為在創建實例的時候,未知的屬性既要輸入屬性名又要為這個未知屬性賦值,所以是要k=v的格式,于是就是**kw而不是*agrs了。
2015-06-11
贊!贊!贊!
2015-06-03
這個必須贊一個,學的很扎實呀
2015-05-26
解釋的很到位