def f(x=[ ]):
x +=[3]
return x
print(f()+f())
print(f())输出:
First:
[3,3,3,3]
第二版:
[3,3,3]
发布于 2018-04-12 03:50:35
由于python的默认参数,因此在程序启动时只能绑定一次。因此,对于f()的第一个调用,它返回[3]并更改x引用[3]的数组。
所以
print([3]+f())
print(f())然后,对f()的第二个调用,因为[]已经更改为[3],结果将是[3,3],引用下的数组也将被更改。
所以
print([3,3]+[3,3])
print(f())类似于下一行。它将返回[3,3] + [3]
print([3,3]+[3,3])
print([3,3,3])你就是这样得到它的。
发布于 2018-04-12 03:48:29
f()+f()的输出之所以是[3,3,3,3],是因为将相同的对象x添加到自己中。
让我们把它分解:
在第一次调用f() -> x=[3]之后。
在第二次调用f() -> x=[3,3]之后
现在f()+f() = x+x = [3,3] + [3,3] = [3,3,3,3]
也许演示的一种方法是修改函数以打印id(x)。
def f(x=[ ]):
x +=[3]
print(id(x))
return x
print(f()+f())
#4370444584
#4370444584
#[3, 3, 3, 3]如果希望它输出[3,3,3],则必须让函数返回x的副本
def f(x=[ ]):
x +=[3]
return [val for val in x]
print(f()+f())
#[3,3,3]https://stackoverflow.com/questions/49787617
复制相似问题