逻辑不在 Python
Logical not in Python
我看到这样的代码:
if not n >= 0:
raise ValueError("n must be >= 0")
为什么不直接使用呢?
if n < 0:
我是 Python 的新手,我想它们是一样的。是真的吗?
我猜是因为它试图用英语而不是代码来描述操作。 "If n is not greater than or equal to zero" vs. "If n is less than 0",前者描述的是想要的值,如果没有得到就是错误,后者描述的是不需要的值,后者少了"friendly",至少是 IMO(我承认这无关紧要;我不在乎代码是否使用其中任何一个)。
在实践中,它们归结为同一件事(假设 n
与 int
的丰富比较形成了一个完整的排序关系,没有技巧)。即使是 CPython,它有一个糟糕的字节码优化器,也能识别这样的 not
并且只是在 POP_JUMP_IF_TRUE
和 POP_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 实现不会。
我看到这样的代码:
if not n >= 0:
raise ValueError("n must be >= 0")
为什么不直接使用呢?
if n < 0:
我是 Python 的新手,我想它们是一样的。是真的吗?
我猜是因为它试图用英语而不是代码来描述操作。 "If n is not greater than or equal to zero" vs. "If n is less than 0",前者描述的是想要的值,如果没有得到就是错误,后者描述的是不需要的值,后者少了"friendly",至少是 IMO(我承认这无关紧要;我不在乎代码是否使用其中任何一个)。
在实践中,它们归结为同一件事(假设 n
与 int
的丰富比较形成了一个完整的排序关系,没有技巧)。即使是 CPython,它有一个糟糕的字节码优化器,也能识别这样的 not
并且只是在 POP_JUMP_IF_TRUE
和 POP_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 实现不会。