def foo(i, x=[]):
x.append(x.append(i))
return x
for i in range(3):
y = foo(i)
print(y)
print(y)
这导致
[0, None]
[0, None, 1, None]
[0, None, 1, None, 2, None]
[0, None, 1, None, 2, None]
为什么列表中会附加None
?我检查了一些关于这个主题的主题,遗憾的是我还不能理解为什么要打印None
。
如果我仅用x.append(x.append(i))
替换x.append(i)
None
就会消失。这是有道理的,但我仍然不清楚为什么x.append(x.append(i))
添加None
。
答案 0 :(得分:1)
Alecxe是对的。总而言之,append(value)没有返回值,因此将返回None。如果您希望在半pythonic庄园中附加返回值,请使用:y = x = x + [value]
这将设置y等于x,并在两者中附加值。
但是,除此之外,部分问题在于您使用的是可变的默认参数。 这意味着每次使用默认值x调用函数时,列表x将与上次调用完成时相同。 请考虑以下
def add(num, x=[]):
x.append(num)
print x
致电add(4)
将打印[4]
,然后在打印add(5)
后调用[4, 5]
我希望这会有所帮助。
答案 1 :(得分:0)