Python booleans-如果x:,如果x==True,则vs,如果x是Tru

2024-05-23 20:13:25 发布

您现在位置:Python中文网/ 问答频道 /正文

如果之前有人问过这个问题,我深表歉意,但我一直在徒劳地寻找我的问题的答案。基本上,在Python2.7中,我有一个运行一系列地理处理工具的程序,这取决于用户在脚本中调整的一系列真/假变量(例如

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则不是这种情况。鉴于PEP8强烈建议仅使用if x:变量,有人能解释为什么会发生这种行为吗?似乎if x:更像是对“if x is not False”或“if x exists”的测试。考虑到这一点,我认为如果x是真的,我应该使用它:在这种情况下,不管PEP 8怎么说。

亲切的问候


Tags: 工具run答案用户in程序脚本false
3条回答

其他错误值包括0''[]。你应该使用if x:版本。

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

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

如果任何一个对象都适用,则该对象被视为“false”,否则将被视为“true”,无论它实际上等于或与FalseTrue相同

现在,如果您已经安排了x必须是对象TrueFalse之一,那么您可以安全地编写if x。如果您已经安排了x的“真实性”指示是否执行操作,而不考虑类型,那么您可以安全地编写if x。你可以写的地方,你应该这样做,因为它更干净的阅读。

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

Python程序员应该知道什么是真的,所以如果您只是编写文档,“如果x是真的,则运行函数”,那么这就表示了原始代码的作用。记录它,“如果x is True将有不同的含义,则运行函数,并且由于PEP8中的样式规则(该规则表示要测试真实性,而不是特定值True)而不太常用。

但是,如果您希望代码在x是空容器而不是None的情况下有不同的行为,那么您应该编写类似if x is not None的代码。

x = 'False'
x = 123

都是True

Other truth values.

文档解释了其他值。

就PEP8的原因而言,它的语义要多得多

相关问题 更多 >