python中函数默认参数的陷阱(《改善python程序的91个建议》)
2017-11-30 15:23
387 查看
例1:
def fun(when = time.time()): print(when) fun() time.sleep(2) fun()
两次调用fun函数,应该相差两秒才对,但实际得到的结果是一样的。如下面所示:
1512026249.7497542 1512026249.7497542
例2:
def fun(a, lt = []):lt.append(a)print(lt)fun(0)fun(1)两次调用fun函数,结果为:
[0][0, 1]
注意,第二个结果不是[1]。
当解释器执行def的时候, 默认参数也会被计算, 并存在函数的.func_defaults属性中。 由于Python中函数参数传递的是对象, 可变对象在调用者和被调用者之间共享,再次执行函数时,默认参数不会重新计算,而是继续使用上一次调用后得到的默认参数值。注意,可变对象才会发生这种情况。
修改:when=time.time; lt=None
相关文章推荐
- 改善Python程序的91个建议
- 改善python程序的91个建议读书笔记2
- 改善python程序的91个建议读书笔记(4)
- 改善python程序的91个建议
- 改善python程序的91个建议读书笔记(3)
- 编写高质量代码 改善Python程序的91个建议
- 《改善Python程序的91个建议》读书笔记(部分)
- 《编写高质量代码 改善Python程序的91个建议》读后程序学习小结
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- 改善python程序的91个建议读书笔记1
- 改善Python程序的91个建议
- 《改善Python程序的91个建议》阅读笔记
- Python split()函数默认参数
- [编写高质量代码:改善java程序的151个建议]建议65 避开基本类型数组转换列表陷阱
- [Python]函数的参数----默认参数
- Python 函数默认参数不能使用可变对象,如List,dict
- python基础教程共60课-第42课函数的默认参数
- 改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针
- 改善C++ 程序的150个建议学习之建议14:小心typedef使用中的陷阱
- python 默认参数问题的陷阱