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

Aks*_*jan 10 python set

这些方法的官方Python 2.7文档几乎完全相同,唯一的区别似乎是remove()引发KeyError而discard没有.

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

Mar*_*ers 22

在一个案例中提出异常是一个非常有意义的区别.如果尝试从不存在错误的集合中删除元素,则最好使用set.remove()而不是set.discard().

这两种方法在实现相同的,不同之处在于相对于set_discard()所述set_remove()功能增加了行:

if (rv == DISCARD_NOTFOUND) {
    set_key_error(key);
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

这提高了KeyError.因为这是稍微多一点的工作,set.remove()是最轻微的一部分; 你的CPU在返回之前必须做一个额外的测试.但是如果你的算法取决于异常,那么额外的分支测试几乎不重要.