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

慎用可变长度的参数

作者: 叶田的学习笔记 | 来源:发表于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)

相关文章

  • 慎用可变长度的参数

    *args **kwargs 为什么要慎用可变长度参数呢?1、使用过于灵活,在混合普通参数或者默认参数的情况下,变...

  • JavaSE进阶十一 反射机制二

    1,可变长度参数 语法:类型... (注意:一定是3个点) 可变长度参数要求参数个数是:0-N个。 可变长度参数在...

  • 提示五十三、五十四

    提示五十三:慎用可变参数。 如果可变参数要求至少要求一个参数的话,可以使用这种样式。 在重视性能的情况下,因为可变...

  • java反射调用可变长度参数的方法

    在java中可以用可变长度参数,这样可以给调用者更大的灵活度,可变长度参数在编译后就是一个数组参数,不用担心可变长...

  • Java语法糖之可变长度参数

    可变长度参数原理 反编译class文件: 可变长度参数只能作为方法中的最后一个参数,而且只能有一个。 总结 Jav...

  • R语言技巧每日分享day6-对列表元素执行可变长参数函数do.c

    do.call()用于将list里面的每一个元素执行可变长参数函数。 首先可变长参数函数是指,函数参数的长度是可变...

  • 参数

    可变参数 Java声明函数是可通过int ... num 等方式声明可变长度的参数,用于传输参数个数不固定的场景,...

  • 反射

    反射 第一节:可变参数 从JDK 5开始,Java 允许为方法定义长度可变的参数。 语法: 注意事项: 调用可变参...

  • 第42条 慎用可变参数

    从Java1.5开始就增加了可变参数(varargs)方法,又称作variable arity method。可变...

  • 第 53 条:慎用可变参数

网友评论

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

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