p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #021ca1; background-color: #8e3528 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d7c9a7; background-color: #8e3528 }
span.s1 { color: #5cdd49 }
span.s2 { }
span.s3 { color: #d7c9a7 }
span.s4 { color: #021ca1 }
span.s5 { color: #5bd9e6 }
# *args代表非关键字可变参数的集合(元组),**kw代表关键字可变参数的集合(字典).
classstudent(object):
def__init__(self,id,*args,**kw):
print"id:",id
for i in args:
print"args:",i
for j in kw:
print"kw:",kw[j]
student(1,2,3,name='pdk',sex='boy')
输出:
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d7c9a7; background-color: #8e3528 }
span.s1 { }
id: 1
args: 2
args: 3
kw: pdk
kw: boy
补充:
1、当函数的参数不确定时,可以使用*args和**kwargs。*args没有key值,**kwargs有key值
2、*args表示任何多个无名参数,它是一个list;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前
另外,说明一点*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哈哈,这格式简直了。。。。。