1. 默认参数
默认参数即是在函数调用时没有为参数提供值时使用预先定义的默认值。
非默认变量必须在默认变量之前,否则报错。
在调用时使用关键字参数可以不按顺序,结合默认参数,可以跳过缺失参数,所以下面调用方式都是正确的。
默认参数必须指向不变对象!
如上图所示,当默认函数是一个列表,第一次调用没啥问题,第二次调用的时候会发现默认参数变了。原因是函数在定义的时候,这个默认参数就已经被赋值,指向了一个对象,生命周期不会随着函数调用结束而结束。所以每次调用函数时,如果改变了参数值,对于可变对象,对象本身不会发生变化,下一次调用时就会使用的改变后的值。
如果一定要提供列表形式的默认参数,可以采用下面的方式:
2. 可变长参数
可变长参数分成两种,一种是,有些地方叫,一种是,也叫,主要应用在不确定要传递多少个参数的情况下。
一个简单的数字计算函数如下:
在调用的时候,就要先定义好一个列表或者元组,再整个传入,这是传统的做法。
在参数前面加个号即可表示,可以理解为不定数量的多个位置参数。
但如果调用前,已经有了列表或者元组,遇见了函数定义时使用了非关键字可变参数,传参反而显得麻烦了。
这时候*号也可以在函数调用的时候使用,称之为
在参数前面加个号表示,这些可变参数在函数调用时自动组装为一个字典
**号在函数调用的时候使用同样可以解包裹。
3. 混合使用
基本原则是:先位置参数,默认参数,非关键字可变长参数,关键字可变长参数(定义和调用都应遵循)。例如:
这种情况要注意的是默认参数不会被忽略掉的,默认值会被修改。
想要不被修改,可以将默认参数放在非关键字可变长参数之后,但是需要注意的是,这种操作在python2.7下试不允许的,会报错。
python 3.5.5版本下,这么做是被允许的。
领取专属 10元无门槛券
私享最新 技术干货