灵感来自this question.
为什么python中没有list.clear()方法?我在这里发现了几个问题,说正确的方法是下面的其中一个,但是没有人说为什么没有一个方法可以解决这个问题。
del lst[:]
lst[:] = []
虽然有不止一种方法做某事可能违背了“python之禅”,但对我来说,有一个“list.clear()”方法显然更为明显。它也将符合dict和set,它们都有.clear()。
我看到一些关于python开发和python思想的帖子,但没有得到明确的答案(参见here(2006)和here(2009))。圭多参与了吗?这只是过去4-5年来还没有解决的争论点吗?
更新:list.clear()已在3.3-see here中添加到python中
在您链接的线程中添加该方法的Raymond Hettinger pretty much sums up the pros and cons。说到语言设计,保守是很重要的。例如,请参见C团队拥有的"every feature starts with -100 points"原则。通过随意添加特性,您不会得到像Python那样干净的东西。只需看看一些更为粗俗的流行脚本语言,就可以知道它会把你带到哪里。
我想
.clear()
方法从来没有越过隐式-100点规则,成为值得添加到核心语言中的东西。尽管methodname已经被用于相同的目的,而且很难找到替代方法,但它可能并没有那么远。虽然在问这个问题时没有} 和^{} 中,以简化列表和其他集合(set、dict等)之间的切换。
list.clear()
,但3.3现在有了一个(如http://bugs.python.org/issue10516中所要求的)。此外,clear()
方法被添加到^{有关更改的详细信息,请参见here。
我无法回答原因;但绝对应该有一个,这样就可以用同一个接口清除不同类型的对象。
一个显而易见的简单例子:
这只需要对象支持迭代,并且它支持clear()。如果lists有一个clear()方法,那么它可以接受一个list或设置相等的值。相反,由于集合和列表有不同的API来删除它们的内容,这是行不通的;您最终会遇到一个不必要的丑陋的黑客攻击,比如:
就我而言,使用del obj[:]或obj[:]=[]只是不愉快的,不直观的黑客来解决列表缺少clear()这一事实。
这就把“减少冗余”变成了一个错误,它破坏了语言的一致性,这一点更为重要。
至于你该用哪种,我建议用del obj[:]。我认为对于非列表类对象更容易实现。
相关问题 更多 >
编程相关推荐