*args
def SumFun(*args):
result = 0
for x in args:
result += x
return result
print(SumFun(2,4))
print(SumFun(1,2,4))
print(SumFun())
结果:
6
7
0
**kwargs
def category_table(**kwargs):
for name,value in kwargs.items():
print('{0} is a kind of {1}'.format(name,value))
category_table(apple='fruit',carrot='vegetable',python='programming language')
category_table(BMW='car')
为什么要慎用可变长度参数呢?
1、使用过于灵活,在混合普通参数或者默认参数的情况下,变长参数意味着这个函数的签名不够清晰,存在多种调用方式。
2、如果一个函数的参数列表很长,虽然可以通过使用*args和**kwargs来简化函数的定义,但通常这意味这个函数可以有更好的实现方式。
3、可变长参数适合在下列情况下使用(不限于以下场景):
- 为函数添加一个装饰器
def mydecorator(fun):
def new(*args,**kwargs):
# ....
return fun(*args,**kwargs)
return new
- 如果参数的数目不确定,可以考虑使用变长参数
- 用来实现函数的多态或者在继承情况下子类需要调用父类的某些方法的时候
class A(object):
def somefun(self,p1,p2):
pass
class B(A):
def myfun(self,p3,*args,**kwargs):
super().somefun(*args,**kwargs)
网友评论