python - 关于将 bool 值与 True 或 False 进行比较的奇怪 PEP8 建议

标签 python pep8

Python 结束 PEP 8我正在阅读:

  • 不要使用 ==

    将 bool 值与 True 或 False 进行比较
     Yes:   if greeting:
     No:    if greeting == True:
     Worse: if greeting is True:
    

当 bool 值是 True 时,我对这个建议没有问题,但在检查 False 时听起来很奇怪。

如果我想知道一个变量 greeting 是否为 False,为什么我不应该写下面的代码?

    if greeting == False:

如果我写if not greeting: 它将与上面的语句有非常不同的含义。如果 greeting 是 None 怎么办?如果是空字符串怎么办?此 PEP 8 建议是否意味着存储 bool 值的变量应仅包含 True 或 False,并且应避免为这些变量使用 None?

在我看来,它看起来像是来自其他具有静态类型的语言的推荐,并且不适合 Python,至少与 False 相比是这样。

顺便说一下,为什么 if greeting is True:if greeting == True: 更糟糕?我们是否还应该理解 if greeting is False: 也比 if greeting == False: 更糟糕?

最佳答案

我相信你读错了。尽量不要将 greeting 视为名词而不是动词(“我正在打招呼”而不是“这是问候语”)。

你可以在 PEP8 的序言中看到线索:

One of Guido's key insights is that code is read much more often than it is written. The guidelines provided here are intended to improve the readability of code.

为此,代码应尽可能类似于书面或口头语言。你不会说 “如果我烦你是真的,请告诉我” 在现实生活中,你只需说 “如果我烦你,请告诉我” .

这就是为什么您经常看到诸如 isOpenhasBeenProcessed 之类的 bool 变量的原因之一,因为它们有助于提高代码的可读性。

你永远不应该做这样的事情:

if (isOpen == True)

或:

if (customerDead == False)

只是因为您的变量名中已经有一个 bool 值。所有等式都给你的是另一个 bool 值,并且调用减少广告荒谬,你会在哪里停止?

if (isComplete == True) ...
if ((isComplete == True) == True) ...
if (((isComplete == True) == True) == True) ...
if ((((isComplete == True) == True) == True) == True)...

关于python - 关于将 bool 值与 True 或 False 进行比较的奇怪 PEP8 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050335/

相关文章:

python - 具有单个条件的多行 If 语句

python - Django admin 上 list_display 项目的自定义值

Python readline - 如何链接主目录中内置的 ncurses?

python - 在 python 文件之间共享代码

python - 打破长if语句的推荐方法是什么? (二元运算符后的 W504 换行符)

python - 在变量内拆分长 SQL 查询

PyCharm PEP8 保存时

python - “输入”两个具有最低复杂度的排序列表

Python:OpenCV findHomography 输入

python - 分割这条线的最pythonic方式?