函数的默认参数不会每次都新建?
最近同事问了个参数的问题,和他一起讨论了一下。
他给了我一个这样的代码:
def test(x, a=[]):
a.append(x)
return a
x = test(1)
y = test(2)
print(x)
print(y)
各位先自己想下输出会是什么?
提问的同事以为答案会是:
[1]
[2]
但实际却是:
[1, 2]
[1, 2]
他表示想不通:难道不是每次调用函数,没有传参数都会把一个空列表作为参数吗?
这里的原因在于,函数的参数默认值,是在一开始定义(也就是 def)的时候所决定的,并不是到执行时才创建。我换一个例子,就看得更明白了:
import time
print("time befor def:",time.time())
def test(a = time.time()):
print(a)
time.sleep(1)
print("time befor call1", time.time())
test()
time.sleep(3)
print("time befor call2", time.time())
test()
输出:
time befor def: 1577172118.2069783
time befor call1 1577172119.20733
1577172118.2069783
time befor call2 1577172122.208009
1577172118.2069783
感觉好深奥,我已经晕了 ,收藏一下,慢慢研究
666
有些点很细
但是很重要