黑马程序员技术交流社区

标题: 【广州python】函数缺省参数的坑--新手必看 [打印本页]

作者: 杰哥,我就服你    时间: 2018-6-27 11:50
标题: 【广州python】函数缺省参数的坑--新手必看
本帖最后由 杰哥,我就服你 于 2018-6-27 22:17 编辑

当缺省(默认)参数是一个列表时,会出现预期之外的结果,代码如下:

预期结果:

实际结果:

问题解释:当定义函数时,会保存函数中默认参数list的值,也就是列表[],在每次调用的时候如果传递了列表,则使用传递的列表,没有传递,使用定义函数时保存的缺省参数list,以上案例中两次调用都没有传递默认参数list,程序会调用定义函数时,保存的默认参数list,列表在append的时候回在原来的基础上添加,所以会产生以上结果,我们可以通过打印id看出。
修改代码:

执行结果:

会发现id值是相同的,说明两次执行时使用的都是定义函数时默认的缺省参数
再次修改代码:

执行结果:

结果会发现执行传递空列表的函数时打印的id不一样,而没有传递的一样。当传递空list时函数体当中会使用传递的空list,没有传递时,使用函数默认的list。所以会产生以上结果
如果要达到预期的效果,只需把空列表换成None解决,代码如下:

执行结果:

总结:缺省默认)参数应指向不可变对象,对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2