这是用python编写的。你知道吗
所以,我定义了这样一个函数:
def function(var1, var2 = [[], 0]):
# some code that changes both var1 and var2
return (var2, var1)
然后,我做了一个for循环:
for x in range(10):
print(function(x))
我对函数内部的var2
做了一些更改。我遇到的问题是,在涉及x
的for循环中,在var2
结转的每个下一次迭代中发生的更改。我不明白为什么会这样。我把它改为:
for x in range(10):
print(function(x, [[], 0]))
但是,我不希望必须这样做(指定var2每次为[[], 0]
)。你知道吗
另外,如果这有帮助的话,这个函数是递归的。它运行良好,只是var2
继续。你知道吗
我怎样才能防止这种情况发生?你知道吗
Python在第一次编译代码时创建一次函数的默认参数,并在需要默认参数时使用该对象。一个结果是,如果参数是可变的,比如一个列表,对它的任何更改都会在以后的所有调用中看到。一种解决方案是使用不同的值作为默认值,并使用它动态创建默认值
另一种选择是停止原地改变列表,而是返回一个副本。你知道吗
我怎样才能防止这种情况发生?用
tuple
代替list
var2=((), 0)
。你知道吗说明:指定为默认参数
list
的var2
被存储一次,并且每次调用函数时都会获取,除非您将另一个参数指定为var2。因此,当该列表被修改时,下次获取它时,它将携带修改。这就是为什么使用list
作为默认参数是一种不好的做法,而是使用tuple
,因为tuple
是不可变的。你知道吗相关问题 更多 >
编程相关推荐