小编典典

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

python

抱歉,是否曾经有人问过这个问题,但是我徒劳地寻找我 确切 问题的答案。基本上,对于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不得不说。

亲切的问候


阅读 204

收藏
2021-01-20

共1个答案

小编典典

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。如果您安排了“真实性”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

2021-01-20