2

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

条件一:

if 0:
   Print "true"

output:

条件二:

if -1:
   Print "true"

output: true

条件 3:

if 1:
   Print "true"

output: true

我将解释我的代码,

条件 1:它没有打印语句,因为它被视为 false(boolean)

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

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

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

4

5 回答 5

5

就像下面这样简单:

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

在 Python 中,参数被转换为布尔值,如下所示(稍微解释一下):

4.1 真值检验

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

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

然后就是False。否则,它是True

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

于 2013-10-28T11:15:52.757 回答
2

您可能正在寻找的内容:

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

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

没有任何

错误的

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

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

任何空映射,例如 {}。

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

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

于 2013-10-28T11:14:25.407 回答
1

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

>>> bool(-1)
True

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

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

于 2013-10-28T11:12:00.103 回答
1

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

于 2013-10-28T11:14:40.657 回答
1

该文档准确地告诉您哪些值被认为是错误的:

  • None
  • False
  • 任何数字类型的零,例如 , 0, 0L, 。0.00j
  • 任何空序列,例如'', (), [].
  • 任何空映射,例如{}.
  • 用户定义类的实例,如果该类定义了一个__nonzero__()or__len__()方法,当该方法返回整数零或bool值时False。有关这些特殊方法的更多信息,请参阅 Python 参考手册(基本自定义)。
于 2013-10-28T11:20:05.403 回答