__init__可以加上**kw参数,那可不可以*args参数呢?
如题,如果可以加上*args参数,可不可以举个例子怎么使用呢?需要像**kw一样使用某种函数吗?
如题,如果可以加上*args参数,可不可以举个例子怎么使用呢?需要像**kw一样使用某种函数吗?
2015-08-22
“11届西华牛饮客”回答得有点问题,以下是我找到的有关*args和**kwargs几个权威解释:
1、当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值
2、*args表示任何多个无名参数,它是一个list;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前
参考链接:http://blog.csdn.net/chenjinyu_tang/article/details/8136841
那么*args和**kwargs之间就没有可替代性,代表的类型就不一样,目前涉及类的初始化定义中用到的**kwargs的有“4-4 初始化实例属性”和“5-6 获取对象信息”的编程任务题,各位可以找到相应课程查看
另外,说明一点*args和**kwargs的名称不是固定不变,实际格式的重点是前面的*,格式要求是*XXX和**XXX,只是因为习惯用法约定俗成的,如同实例方法用self和类方法用cls一样,测试下面两端代码你就能有一定理解了,对比代码如下:
【代码一】定义关键字参数为**kw
class Person(object):
def __init__(self, name, gender, **kw):
self.name = name
self.gender = gender
for k, v in kw.iteritems():
setattr(self, k, v)
p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course
【代码二】定义关键字参数为**test
class Person(object):
def __init__(self, name, gender, **test):
self.name = name
self.gender = gender
for k, v in test.iteritems():
setattr(self, k, v)
p = Person('Bob', 'Male', age=18, course='Python')
print p.age
print p.course
【运行结果】
18
Python
举报