Python列表扩展和变量分配


问题内容

我试图扩展一个列表,并且对结果返回值为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”是多余的,但是为什么会中断操作呢?


问题答案:

因为,你注意到没有,返回值extendNone。这在Python标准库中很常见;破坏性操作return
None,即没有值,因此您不会像使用纯函数一样被诱惑使用它们。阅读Guido对这种设计选择的解释

例如,sort列表中的方法None也会返回,而非破坏性sorted函数将返回一个值。