1. 作用
成熟的语言在设计方法时都会考虑到可变参数,例如Java1.5增加的变量前加 … 。而在python中可变参数的表示方式是*args与**kwargs,为何会有两个表达方式呢?答案是为了应对不同的场景。这也是人生苦短,我用python的具体表现吧。
2. 用法
2.1 *args
args用来接收没有键只有值的参数,将它们转为tuple
注意:使用args时,必须保证方法形参列表中,args之前的参数都已经赋值,否则会串位。
例如:
def fun1(a=1, b=2, *args):
print(a, b, args)
# 各种情况:
fun1(1,2,3) # 1, 2, (3,)
fun1(3) # 3, 2, ()
fun1() # 1, 2, ()
2.2 **kwargs
**kwargs用来接收有键有值得参数,将它们转为dict
方法内部则可以从tuple类型的args与dict类型的kwargs中直接取值使用。
def fun2(a=1, b=2, **kwargs):
print(a,b,kwargs)
# 各种情况
fun2(1,2,c=3) # 1, 2, {'c'=3}
fun2() # 1, 2, {}
2.3 *args与**kwargs
将两者结合起来
def fun2(a=1, b=2, *args, **kwargs):
print(a,b,args,kwargs)
# 各种情况
fun2() # 1, 2, (), {}
fun2(3) # 1, 2, (3), {}
fun2(c=4) # 1, 2, (), {'c'=4}
fun2(3, 4, c=5, d=6) # 1, 2, (3, 4), {'c'=5, 'd'=6}