【问题标题】:What is the rules of if condition? [duplicate]if条件的规则是什么? [复制]
【发布时间】:2013-10-28 11:09:25
【问题描述】:

我是 python 新手,我不确定if 条件的规则:

条件一:

if 0:
   Print "true"

output:

条件2:

if -1:
   Print "true"

output: true

条件 3:

if 1:
   Print "true"

output: true

我将解释我的代码,

条件1:它没有打印语句,因为它被视为假(布尔值)

条件 2: 打印语句,因为它被视为 true(boolean)

为什么它取真,它是负值(我假设它只取假)?

条件 3:打印语句,因为它被视为 true(boolean)。

【问题讨论】:

  • 在 python 和大多数语言中,除了 false、null 和 0 之外的所有内容都被视为 true。

标签: python


【解决方案1】:

就这么简单:

Python if 语句(和许多其他语言)中的条件被转换为布尔值,无论它通常是什么类型。这是使用已定义的机制完成的,该机制指定参数是True 还是False 以获取不同的值。

在 Python 中,参数按如下方式转换为布尔值(稍作解释):

4.1 Truth Value Testing

可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。如果参数是以下之一:

  • None
  • False
  • 数字 0 表示为任何数字类型(整数、浮点数、长整数、复数)
  • 任何空序列(''()[]
  • 任何空地图 ({})
  • 用户定义类的实例,如果该类定义了__bool__()__len__() 方法,则该方法返回整数零或布尔值False

那就是False。否则为True

由于-1 不是假的,因此它是真的,因此运行 if 语句,即使它是否定的。

【讨论】:

    【解决方案2】:

    您可能在寻找什么:

    Python 中的真值: http://docs.python.org/2.4/lib/truth.html

    可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。以下 值被认为是错误的:

    错误

    任何数字类型的零,例如,0、0L、0.0、0j。

    任何空序列,例如,''、()、[]。

    任何空映射,例如 {}。

    用户定义类的实例,如果该类定义了一个 nonzero() 或 len() 方法,当该方法返回整数零或布尔值 False.2.5

    所有其他值都被认为是真实的——所以许多类型的对象都是 永远正确。

    【讨论】:

    • 即使内容看起来一样,链接here对我来说似乎更好。
    【解决方案3】:

    仅仅因为数字是负数并不意味着它是False

    >>> bool(-1)
    True
    

    当你做if <something>:时,把它想象成python在做if bool(<something>)

    如果 bool(<something>) 为 True,则 if 语句将运行。否则,它不会。

    【讨论】:

      【解决方案4】:

      只有 0 被视为 False。负数并不意味着它是 False。尝试任何负数结果都是 True。

      【讨论】:

        【解决方案5】:

        The documentation 准确地告诉你哪些值被认为是错误的:

        • None
        • False
        • 任何数字类型的零,例如,00L0.00j
        • 任何空序列,例如''()[]
        • 任何空映射,例如{}
        • 用户定义类的实例,如果该类定义了__nonzero__()__len__() 方法,则当该方法返回整数零或boolFalse。有关这些特殊方法的更多信息,请参阅 Python 参考手册 (Basic customization)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-03-17
          • 2011-05-06
          • 2015-01-04
          • 1970-01-01
          • 2022-11-10
          • 2012-10-07
          • 1970-01-01
          相关资源
          最近更新 更多