python中的参数传递,可以总结成以下结构:def func(位置参数,关键字参数)
从python3.8开始,增加了限定位置参数,用‘/’进行分隔,位置参数和关键字参数间用*或*args分隔。
参数顺序必须按顺序不能交叉,下表统计各种参数的使用方式:
限定位置参数 | 普通位置参数 | 默认位置参数 | *args | 命名关键字参数 | 命名关键字默认参数 | **kwargs | |
调用 | 顺序 | 顺序/关键字 | 顺序/关键字 | * | 关键字 | 关键字 | 关键字 |
是否必传 | 是 | 是 | 否 | 否 | 是 | 否 | 否 |
补充说明:
1、关键字参数调用后不能有普通位置调用,所以
(1)、普通位置参数如果采用关键字方式调用,后续参数也必须采用关键字调用
(2)、*args如果希望接收到值,前面的参数必须按位置参数传,不能按关键字参数传
2、默认位置参数必须放到位置参数的最后,默认关键字参数可以不放到关键字参数的最后
3、*args用于接收多余的位置参数,**kwargs用于接收多余的关键字参数
4、用序列的元素解析作为函数实参,前缀增加*;将字典的元素解析作为函数实参,前缀增加**
5、参数结构一般是:约束型,普通型,接收多余型
6、默认参数最好使用不可变对象
总结:python函数参数比C++调用稍微复杂,但是灵活性很高,可扩展性很强。既有一般用法参数,也有*args和**kwargs等自由度很高的用法,在自由度高的用法上,又增加了限制,比如限定位置参数和命名关键字参数,既有自由又有约束。总结自知乎文章:https://www.zhihu.com/question/57726430。