逻辑不在 Python

Logical not in Python

我看到这样的代码:

if not n >= 0:
        raise ValueError("n must be >= 0")

来自 snippet in the docs.

为什么不直接使用呢?

if n < 0:

我是 Python 的新手,我想它们是一样的。是真的吗?

我猜是因为它试图用英语而不是代码来描述操作。 "If n is not greater than or equal to zero" vs. "If n is less than 0",前者描述的是想要的值,如果没有得到就是错误,后者描述的是不需要的值,后者少了"friendly",至少是 IMO(我承认这无关紧要;我不在乎代码是否使用其中任何一个)。

在实践中,它们归结为同一件事(假设 nint 的丰富比较形成了一个完整的排序关系,没有技巧)。即使是 CPython,它有一个糟糕的字节码优化器,也能识别这样的 not 并且只是在 POP_JUMP_IF_TRUEPOP_JUMP_IF_FALSE 的字节码指令之间切换,它们具有相同的开销,所以它没有做任何事情额外的工作。

评论和之前的回答涵盖了编码风格。还有一个重要的功能点:NaN

NaN(非数字)值来自某些产生不可接受结果的数据操作。硬件或方法文档将指定何时返回 NaN。这通常伴随异常,但如果您有更深层次的应用程序来处理异常并决定接受结果,您可能会看到这样的值。大数据框架经常这样做。

功能点是 NaN 值将无法通过 any 比较测试。例如,检查 NaN 的一种简单方法是将值与自身进行比较:

if n == n:
    print "legal"
else"
    print "NaN"

请注意,您不能使用 n != n 来反转逻辑,因为这也会计算为 False.

因此,两个比较之间的功能差异。

if not n >= 0:

如果n为NaN则抛出异常; n < 0 实现不会。