慎用可变长度的参数

2018-11-05  本文已影响0人  叶田的学习笔记

*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)
上一篇下一篇

猜你喜欢

热点阅读