您的位置:首页 > 编程语言 > Python开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: