Python列表扩展和变量赋值

时间:2012-03-15 16:49:52

标签: python list variable-assignment extend

我试图扩展一个列表,并且因为结果返回值为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'的赋值是多余的,但为什么它会破坏操作呢?

3 个答案:

答案 0 :(得分:9)

因为,正如您所注意到的,extend的返回值为None。这在Python标准库中很常见;破坏性操作返回None,即没有值,所以你不会试图使用它们,就好像它们是纯函数一样。阅读此设计选择的Guido's explanation

例如,列表上的sort方法也返回None,而非破坏性sorted函数返回值。

答案 1 :(得分:4)

因为所有就地函数都返回None,以强调他们正在改变他们的论点这一事实。否则,您可能会将返回值分配给某个东西,而不会意识到该参数也已更改。

答案 2 :(得分:0)

简单.extend()不返回

如果你想,你可以加入他们;

a = a + b