这里为什么需要定义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)
举报