我想弄清楚下面的行为。具体而言,在下面的示例中,当我设置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
答案 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]