python中,有默认参数时,需要将默认参数放在必选参数之后
有多个默认参数时,可以通过顺序提供默认参数,也可以不通过默认顺序而是指定参数名提供参数。默认参数很有用,但有的时候也会变成坑。例如如下情况:
![](https://img.haomeiwen.com/i4966363/3e3bea5f12e02457.png)
原因解释如下:
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
上述函数可修改成如下方式:
![](https://img.haomeiwen.com/i4966363/52843b281a498da0.png)
为什么要设计str、None这样的不变对象?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
网友评论