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 必须在返回前进行一项额外测试。但是,如果您的算法 依赖于异常 ,那么额外的分支测试几乎无关紧要。
这些方法的 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 必须在返回前进行一项额外测试。但是,如果您的算法 依赖于异常 ,那么额外的分支测试几乎无关紧要。