Python列表扩展和变量赋值
我试图扩展一个列表,结果返回值为None,这让我感到困惑。我尝试的是:Python列表扩展和变量赋值,python,list,variable-assignment,extend,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(
>>> 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”的赋值是多余的,但为什么它会中断操作?因为正如您所注意到的,
extend
的返回值是None
。这在Python标准库中很常见;破坏性操作返回None
,即没有值,因此您不会像使用纯函数一样使用它们。阅读此设计选择
例如,列表上的
sort
方法也返回None
,而非破坏性的sorted
函数返回一个值。因为所有就地函数都返回None
,以强调它们正在改变参数的事实。否则,您可能会将返回值赋给某个对象,而没有意识到参数也已更改。Simply.extend()不返回任何值
如果你愿意,你可以加入他们
a=a+b谢谢丹尼尔。当然,你的回答也是正确的。我只能挑一个来接受!