该功能的预期目标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 = []了bar.clear(),它按照我的想法工作:
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()从工作differntlybar = []自clear()应
从集合中删除所有元素。
所以做同样的事情bar = []。
编辑:我不认为我的问题是“最低惊讶”和可变默认参数的重复,我知道
默认值仅计算一次。
(来自官方教程)但是我要问的是,为什么bar = []不编辑(在这种情况下是清除的)列表,而附加和清除的是呢?
有只小跳蛙
qq_花开花谢_0
小唯快跑啊
幕布斯7119047
相关分类