这里为什么需要定义k,v两个?另外还有关于**arg和*kw的区别
如题,前面调用任意参数是**arg和*kw,这里为什么是*kw,关键还不用*这个符号??谁解释下,谢谢
如题,前面调用任意参数是**arg和*kw,这里为什么是*kw,关键还不用*这个符号??谁解释下,谢谢
2015-05-04
#先说一下*和**的区别,最好还是结合例子来说明用途 #比如我们定义了以下的函数 #它的输入参数一共有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)
举报