python默认参数问题

it2025-04-26  10

我们在定义默认参数时,有时会遇到一写似乎难以理解的问题。比如,在第二次调用函数时,默认参数记住了上一次执行的结果:

>>> def test(L=[3,]): ... L.append("end") ... print(id(L)) ... return L ... >>> test() 2529720312648 [3, 'end'] >>> test() 2529720312648 [3, 'end', 'end'] >>> test() 2529720312648 [3, 'end', 'end', 'end'] >>> test([1,2,3]) 2529720300488 [1, 2, 3, 'end'] >>> test() 2529720312648 [3, 'end', 'end', 'end', 'end'] >>>

看了一下上面代码,我们不难发现,当我们不带参数执行test()函数时,它的默认参数会记住上次的执行结果。原因时默认参数是一个列表变量,它的地址在开始时已经定住了,所以每次改变都会被记录下来。 但是,但你带参数执行test([1,2,3])时,你会发现,函数会为[1,2,3]重新开辟一个地址。 本质上,默认参数和你自己输入的列表参数时两个不同的变量。所以,才会有上面精彩的部分。


版权:保留所有解释权。转发请注明出处。


转载于:https://www.cnblogs.com/busui/p/7211805.html

最新回复(0)