Python 中 set.discard 和 set.remove 方法之间的运行时差异?

Runtime difference between set.discard and set.remove methods in Python?

这些方法的 official Python 2.7 docs 听起来几乎相同,唯一的区别似乎是 remove() 会引发 KeyError 而 discard 不会。

我想知道这两种方法的执行速度是否存在差异。如果做不到这一点,它们之间是否有任何有意义的区别(除了 KeyError)?

在一种情况下引发异常是非常有意义的差异。如果尝试从集合中删除不存在的元素会出错,您最好使用 set.remove() 而不是 set.discard().

这两种方法在实现上是相同的,除了与set_discard() the set_remove() function相比增加了以下行:

if (rv == DISCARD_NOTFOUND) {
    set_key_error(key);
    return NULL;
}

这提高了 KeyError。由于这是稍微多一点的工作,set.remove()teeniest 慢一点;您的 CPU 必须在返回前进行​​一项额外测试。但是,如果您的算法 依赖于异常 ,那么额外的分支测试几乎无关紧要。