为什么[] .append()在python中不起作用?

Ksh*_*rma 9 python

为什么这样做 -

a = []
a.append(4)
print a
Run Code Online (Sandbox Code Playgroud)

但这不 -

print [].append(4)
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*anz 12

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
Run Code Online (Sandbox Code Playgroud)

我没有重载所有有问题的方法,但概念应该是明确的.

  • @KshitizSharma对,它不是"功能样式",但不是因为它返回None,而是因为它就地改变了对象.什么都不返回使得它不太可能被混淆为返回新对象的"功能样式"方法,这会产生别名错误.请注意,每次修改列表时,您确实不想复制列表,因为这样做效率非常低.`list`糟透了作为持久数据结构,有更好的选择. (3认同)