python3不定长参数
1、介绍
python的函数和方法中,都允许不定长参数的声明和使用。
2、使用
不定长参数的三种形式:tuple、dict和混合
- 都是声明在函数或方法的末尾
2.1 tuple
在函数或方法的形参末尾进行声明,前缀*标记,可以任意命名,但一般命名为*args
- 用于接收超出形参声明个数的实参,且超出部分实参是直接设置,而非通过参数名设置
- 在函数或方法内内,args作为tuple类型,用于读取接收的实参。当不存在超出范围的实参时,args为空tuple
2.2 dict
在函数或方法的形参末尾进行声明,前缀**标记,可以任意命名,但一般命名为**kwargs
- 用于接收超出形参声明个数的实参,且超出部分实参是参数名设置,而非直接设置
- 在函数或方法内内,kwargs作为dict类型,用于读取接收的实参。当不存在超出范围的实参时,kwargs为空dict
2.3 混合
在函数或方法的形参末尾进行声明,先声明*args,后声明**kwargs
- 用于接收超出形参声明个数的实参,args接收直接设置的参数,kwargs接收参数名设置的参数
3、中转
函数或方法中,可以使用args或kwargs,分别是tuple和dict类型。但是一般不能使用*args或**kwargs,会报异常,比如直接输出或者作为type函数的参数。
一个函数或方法A接收*args或**kwargs,可以将*args或**kwargs直接作为整体,交给其它函数或方法B,此时相当于A的实参直接传递给B。这个过程相当于中转,需要注意保持函数与方法的一些基本规则。
def p1(name, **kwargs):
p2(name=name, **kwargs)
def p2(name, age, sex):
print(name, age, sex)
p1(name='abc', age='zz', sex='boy')