【问题标题】:Why does [].append() not work in python?为什么 [].append() 在 python 中不起作用?
【发布时间】:2013-01-10 19:17:21
【问题描述】:

为什么会这样 -

a = []
a.append(4)
print a

但这不是——

print [].append(4)

第二种情况的输出是None。你能解释一下输出吗?

【问题讨论】:

  • 如果你打印 a.append(4) 你也会得到 None
  • 哇! Python 社区快如闪电,非常有帮助。 :-) 谢谢大家。

标签: python


【解决方案1】:

append 方法没有返回值。它会更改列表,并且由于您没有将[] 分配给任何变量,因此它只是“迷失在空间中”

class FluentList(list):
    def append(self, value):
        super(FluentList,self).append(value)
        return self

    def extend(self, iterable):
        super(FluentList,self).extend(iterable)
        return self

    def remove(self, value):
        super(FluentList,self).remove(value)
        return self

    def insert(self, index, value):
        super(FluentList,self).insert(index, value)
        return self 

    def reverse(self):
        super(FluentList,self).reverse()
        return self

    def sort(self, cmp=None, key=None, reverse=False):
        super(FluentList,self).sort(cmp, key, reverse)
        return self

li = FluentList()
li.extend([1,4,6]).remove(4).append(7).insert(1,10).reverse().sort(key=lambda x:x%2)
print li

我没有重载所有有问题的方法,但概念应该很清楚。

【讨论】:

  • 但这不是功能风格。它不应该返回它操作的对象吗?
  • 被打了五秒...*叹气*
  • 不,a 是可变的并且它的值被改变了,那里没有任何东西可以返回。
  • @KshitizSharma 如果你需要,你可以选择[] + [4] 而不是追加。请注意,这会创建一个新对象。
  • @KshitizSharma 是的,这不是“功能风格”,但不是因为它返回 None,而是因为它就地改变了对象。什么都不返回使得它不太可能与返回一个新对象的“功能样式”方法混淆,这会产生别名错误。请注意,您真的不想在每次修改列表时都复制它,因为这非常效率低下。 list 作为一个持久数据结构很烂,还有更好的选择。
【解决方案2】:

方法append没有返回值,或者说只有None

a 是可变的,它的值被改变了,那里没有什么要返回的。

【讨论】:

    【解决方案3】:

    追加返回None

    从你的例子:

    >>> print a.append(4)
    None
    

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多