official Python 2.7 docs这些方法听起来几乎相同,唯一的区别似乎是 remove() 会引发 KeyError 而 discard 不会。
我想知道这两种方法的执行速度是否存在差异。如果做不到这一点,它们之间是否存在任何有意义的差异(除了 KeyError)?
最佳答案
在一种情况下引发异常是一个非常有意义的区别。如果尝试从不存在的集合中删除元素会出错,您最好使用 set.remove()
而不是 set.discard()
.
这两种方法在实现上是相同的,除了与 set_discard()
相比。 set_remove()
function添加行:
if (rv == DISCARD_NOTFOUND) {
set_key_error(key);
return NULL;
}
这引发了 KeyError
.因为这是稍微多一点的工作,set.remove()
是最慢的teeniest分数;您的 CPU 在返回之前必须进行一项额外的测试。但是,如果您的算法依赖于异常,那么额外的分支测试几乎无关紧要。
关于python - Python 中 set.discard 和 set.remove 方法之间的运行时差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27850073/