python中变长参数的用法举例?

慎用变长参数
python支持可变长度的参数列表,可以通过*arg, **kwargs这两个特殊语法来实现。以下为变长参数使用的例子:
* 使用*args 来实现可变参数列表: *args用接受
一个包装为元组形式的参数列表来传递非关键字参数,参数个数可以随意。

def SumFun(*args):
    result = 0
    for x in args[0:]:
      result += x
    return result
print SumFun(2, 4)
print SumFun(1,2,3,4,5)
print SumFun()
  • 使用**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')
category_table(BMW = 'Car')
  • 一个函数中同时定义了普通参数,默认参数,以及上述两种形式的可变参数,那么使用情况又会是怎么样的呢?
def set_axis(x, y xlabel='x', ylable='y', *args, **kwargs):
    pass
  • 在下列场景下适合使用可变参数
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(B, self).somefun(*args, **kwargs)

本文摘自《编写高质量代码 改善python程序的91个建议》

猜你喜欢

转载自blog.csdn.net/afar_ch/article/details/51778277
今日推荐