列表输出中未附加任何值

时间:2016-04-17 22:27:43

标签: python nonetype

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

2 个答案:

答案 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)

这是因为Byebug方法附加到列表并返回None

>>> x = []
>>> print(x.append(1))
None

换句话说,内部x.append(i)会附加i,外部会附加None