当前位置: 首页 > 面试题库 >

关于将布尔值与True或False进行比较的奇怪的PEP8建议

陆翔飞
2023-03-14
问题内容

在python PEP8的末尾,我正在阅读:

  • 不要使用以下方式将布尔值与True或False进行比较 ==
    Yes:   if greeting:
    

    No: if greeting == True:
    Worse: if greeting is True:

当boolean为时True,我的建议没有问题,但是在检查时听起来很奇怪False

如果我想知道变量greeting是否为False,为什么不写:

    if greeting == False:

如果我写的if not greeting:话,上面的陈述将有非常不同的含义。如果问候语为None怎么办?如果它是空字符串怎么办?此PEP8建议是否意味着存储布尔值的变量应仅包含True或False,并且应避免对这些变量执行None?

在我看来,这看起来像是来自其他语言的带有静态类型的建议,至少与False相比,它与python不太匹配。

顺便说一句,有人知道为什么if greeting is True:这样描述更糟if greeting == True:吗?我们还应该理解那if greeting is False:更糟if greeting == False:吗?


问题答案:

根据我对PEP的建议的理解,如果您知道可以合理确定foo(通常是这种情况)的类型,则测试显式虚假值是多余的,并且会降低可读性。例如,在中foo = [i for i in range(10) if i == x],您可以肯定地确定唯一的假值foo[](假设不引发任何异常)。在这种情况下,使用是多余的foo == []并且not foo更好。

另一方面,foo == []或的语义值foo == False有时更有价值,因此 代替()使用(IMHO)not foo。具体取决于您要交流的内容。事实上not foo 手段foo一个 错误的价值?”,而foo == False
手段foo具有相同的价值False?”。

PEP声明其中包含的所有内容都是 准则 。规则有例外,这一规则没有什么不同。



 类似资料:
  • 问题内容: 要求“比较应为或”。 但是,如果我遵循此规则,则会得到不同/错误的结果。为什么? 问题答案: 该建议仅适用于测试值的“真实性”的语句。是另一种野兽。 请注意,这始终是因为是数组而不是布尔值,并且执行简单的引用相等性测试(例如,仅;例如)。

  • 我正在尝试将哈希检查从服务器应用程序移动到PostgreSQL。换句话说,我需要调用一个对PGSQL的查询,它将来自查询的字符串与来自字段的字符串进行比较,并将相等比较的结果返回为bool,但如果没有关于clear SQL的过程,我不知道如何实现这一点。 upd:我有字段密码的表用户(当前为文本,将来为bytea)。我想写点什么 它必须返回true或false作为相等比较的结果。

  • 我发现了这个语法: 这个有两个点的语法是什么:叫? 在哪里可以找到有关它的信息? 它是仅适用于布尔值还是以其他不同的方式实现?

  • 我有以下typescript代码: 将strictNullChecks设置为false。 生成的类型是

  • 问题内容: 以这个为例(摘自Java regexchecker不起作用): 是否用于检查的值是否重要? 我知道有这是颇为相似。但是,很明显,这个问题只针对原始对象,而不是对象包装器;因此,将不适用。 另外,应该以不同于其他的方式对待? 问题答案: 从您的评论看来,您正在寻找使用包装器类的“最佳实践” 。但是实际上 并没有 最佳实践,因为使用此类开始是一个坏主意。使用对象包装的唯一原因是在您绝对 必

  • 我可以将指向结构的指针类型转换为带符号的值以返回不同类型的错误吗。C标准是否允许这种行为,或者是一种未定义的行为。 我怎样才能让这个条件起作用?