y.extend(z)返回的NoneType?

时间:2016-06-17 15:21:37

标签: python list

我想弄清楚下面的行为。具体而言,在下面的示例中,当我设置y = y.extend(z)时,分配给y /分配的原因。我可以看到它是一个NoneType对象,我只是没有完全得到为什么。例如。 这个功能的潜在用途[如果有的话] ... 我看到y.extend(z)是一个就地变异操作 - 就是这样,我目前我想,当我尝试将它分配给变量而不是NoneType的返回时,我会发现错误。为什么我错了/为什么Python以这种方式构建/如何使None返回有用?

>>> x = []
>>> y = []
>>> z = [1, 2]
>>> x.extend(z)
>>> x
[1, 2]
>>> y = y.extend(z)
>>> y
>>> y.extend(z)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'extend'

为了给你一些背景,我试图做这样的事情:

l = l[:x].extend(y)

我现在知道我应该这样做:

l = l[:x] + y # where y is already a list

3 个答案:

答案 0 :(得分:2)

  

我看到y.extend(z)是一个就地变异操作 - 就是这样   在这种情况下,当我尝试将其分配给a时,我会发现错误   变量,而不是NoneType,n'est pas?

的返回

好吧,为什么? extend不返回任何内容,就Python而言,它返回None。您正在为变量分配None,这在Python中非常好。然后你试图从None调用一些东西,这显然是无效的。

答案 1 :(得分:1)

0.0没有返回修改后的数组;它只是简单地执行扩展。这意味着.extend将被修改,但该函数不会返回任何内容。

y

答案 2 :(得分:0)

列表的扩展方法直接修改列表而不是返回新列表。

你应该做的

>>> y = []
>>> y.extend([1, 2])
>>> y
[1, 2]