可能重复:
“Least Astonishment” in Python: The Mutable Default Argument默认数组参数意外不为空
def stackdemo(stack=[]):
stack.append('q')
return stack
stackdemo()
print stackdemo()
返回['q','q']
,而
stackdemo([])
print stackdemo([])
具有相同功能的返回正如预期的那样,只有['q']
。
为什么Python中出现重复使用数组,如果使用的是默认?我错过了什么吗?
单线程,更清晰的'if'块:'stack = stack或[]' – JCotton 2012-02-29 20:08:19
@JCotton - 这是错误的。想象一下调用'stackdemo(l)',其中'l = []'在之前定义(并在其他地方使用)。 – eumiro 2012-03-01 08:09:02
你是对的,虽然单线可能在OP的情况下工作。它也会出错''stackdemo(mystr)''mystr =“”'或者其他的False值。它取决于'stack'变量的用法和含义。如果None的值具有不同的含义,或者变量可以保存其他有效但是False的值,则不能替代显式的'is None'检查。 – JCotton 2012-03-01 16:41:43