我试图扩展一个列表,并且因为结果返回值为None而感到困惑。我试过的是:
>>> a = [1,2]
>>> b = [3,4]
>>> a = a.extend(b)
>>> print a
None
我终于意识到问题是最后对'a'的冗余分配。所以这有效:
>>> a = [1,2]
>>> b = [3,4]
>>> a.extend(b)
>>> print a
[1,2,3,4]
我不明白为什么第一个版本不起作用。对'a'的赋值是多余的,但为什么它会破坏操作呢?
答案 0 :(得分:9)
因为,正如您所注意到的,extend
的返回值为None
。这在Python标准库中很常见;破坏性操作返回None
,即没有值,所以你不会试图使用它们,就好像它们是纯函数一样。阅读此设计选择的Guido's explanation。
例如,列表上的sort
方法也返回None
,而非破坏性sorted
函数返回值。
答案 1 :(得分:4)
因为所有就地函数都返回None
,以强调他们正在改变他们的论点这一事实。否则,您可能会将返回值分配给某个东西,而不会意识到该参数也已更改。
答案 2 :(得分:0)
简单.extend()不返回
如果你想,你可以加入他们;
a = a + b