温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - if x:, vs if x == True, vs if x is True
boolean if-statement python

python - 如果x :, vs如果x == True,vs如果x为True

发布于 2020-03-30 21:43:02

抱歉,是否曾经有人问过这个问题,但是我徒劳地寻找了我确切问题的答案基本上,对于Python 2.7,我有一个程序运行一系列地理处理工具,具体取决于用户在脚本中调整的一系列True / False变量所要求的内容,例如

x = True

if x:
    run function

但是,我现在发现x不必在字面上是“ True”即可运行该函数。例如:

In: x = True
    if x:
        print True

Out: True

In: x = 123
    if x:
        print True

Out: True

In: x = 'False'
    if x:
        print True

Out: True

In: x = False
    if x:
        print True

Out: 

因此,除False以外的任何值似乎都将评估为True,如果x == Truex为True则不是这种情况看到PEP 8强烈建议仅使用if x:变体,有人可以解释为什么会发生这种现象吗?如果x:似乎更多地是对“如果x不为假”或“如果x存在”的检验。考虑到这一点,我相信如果x为True,我应该使用:在这种情况下,尽管PEP 8不得不说。

亲切的问候

查看更多

提问者
ssast
被浏览
66
Steve Jessop 2015-09-24 16:10

Python中的以下值在if和其他逻辑上下文中为false

  • False
  • None
  • 数值等于0,如00.0-0.0
  • 空字符串:''u''
  • 空容器(例如列表,元组和字典)
  • 实现__bool__(在Python3中)False__nonzero__(在Python2中)返回False或的任何东西0
  • 任何未实现__bool__(在Python3中)或__nonzero__(在Python2中)但实现__len__以返回等于0的值的东西

如果有任何一个对象适用,则将其视为“ false”,否则将视为“ true”,无论该对象实际上与False等于还是相同。True

现在,如果已安排x必定是对象True对象之一False,则可以放心地编写if x如果您安排了“ true” x指示是否要执行该操作(无论类型如何),那么可以放心地编写if x您可以在哪里写,应该更喜欢这样做,因为它读起来更干净。

通常,如果允许x使用该值,True那么您就处于这两种情况之一,因此您不会编写if x is True重要的是正确记录的含义x,以使其反映代码中使用的测试。

希望Python程序员知道什么被认为是正确的,因此,如果您只是编写文档,“如果该函数x为true,则运行该函数”,那么这表示原始代码的作用。对其进行记录,“如果...运行该功能x is True”将具有不同的含义,并且由于PEP8中的样式规则要求测试真实性而不是特定值,因此不太常用True

但是,如果您希望代码在x为空容器的情况下与在不同情况下的行为有所不同None,则可以编写类似的代码if x is not None