美文网首页
慎用可变长度的参数

慎用可变长度的参数

作者: 叶田的学习笔记 | 来源:发表于2018-11-05 10:22 被阅读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)
    

    相关文章

      网友评论

          本文标题:慎用可变长度的参数

          本文链接:https://www.haomeiwen.com/subject/lsujxqtx.html