【问题标题】:Python list extension and variable assignmentPython 列表扩展和变量赋值
【发布时间】:2012-04-01 05:37:03
【问题描述】:

我试图扩展一个列表,但对返回值为 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”是多余的,但为什么会破坏操作?

【问题讨论】:

    标签: python list variable-assignment extend


    【解决方案1】:

    因为如您所见,extend 的返回值是None。这在 Python 标准库中很常见;破坏性操作返回None,即没有价值,所以你不会想把它们当作纯函数来使用。阅读此设计选择的Guido's explanation

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

    【讨论】:

      【解决方案2】:

      因为所有就地函数都返回None,以强调它们正在改变参数这一事实。否则,您可能会将返回值分配给某个东西,而没有意识到参数也发生了变化。

      【讨论】:

      • 谢谢丹尼尔。当然,你的回答也是正确的。我只需要选择一个接受!
      【解决方案3】:

      简单地 .extend() 不返回任何内容

      如果你愿意,你可以加入他们;

      a=a+b

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        相关资源
        最近更新 更多