函数foo的预期目标是将作为参数提供的数字添加到列表中,如果它为0,则重置列表.首先我写了这个程序:
def foo(n, bar = []):
if n == 0:
bar = []
print("list empty")
else:
bar.append(n)
for y in bar:
print(y, end=', ')
print()
foo(5)
foo(3)
foo(0)
foo(6)
输出:
5,
5, 3,
list empty
5, 3, 6,
但看起来bar = []被忽略了.然后我用bar.clear()更改了bar = [],它按照我的想法运行:
def foo(n, bar = []):
if n == 0:
bar.clear()
print("list empty")
else:
bar.append(n)
for y in bar:
print(y, end=', ')
print()
foo(5)
foo(3)
foo(0)
foo(6)
输出:
5,
5, 3,
list empty
6,
我不明白为什么bar.clear()与bar = []的工作方式不同,因为clear()应该
Remove all elements from the set.
所以bar = []也一样.
The default value is evaluated only once.
(从官方教程)但我要问的是,为什么bar = []不编辑(在这种情况下清除)列表,而追加和清除呢?