当变量是整数时,不理解为什么条件求值为True

时间:2015-01-09 03:16:32

标签: python variables if-statement int boolean

我正在使用具有以下行为的代码。假设我有一个变量d,并将其分配给整数9

d = 9

为什么以下陈述有效?

In [95]: if d:
   ....:     print d
   ....: else:
   ....:     print 'Did not print d!'
   ....:     
9

In [96]: 

当d本身不是布尔值且未通过以下测试时:

In [96]: d is True
Out[96]: False

In [97]: d is False
Out[97]: False

如果有人可以向我解释这一点并指出我有任何误解,我将不胜感激。非常感谢你。

4 个答案:

答案 0 :(得分:3)

引自official Python documentation

  

在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:FalseNone,数字零所有类型,空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。 所有其他值都被解释为true。

if声明属于Booelan操作的上下文。由于d 9不属于任何虚假值,因此被视为Truthy。

您可以像这样确认

>>> all(bool(value) is False for value in (False, 0, +0, -0, "", (), [], {}, set()))
True

虽然您使用9True测试确定的值False既不是d is True也不是d is False,但它被视为Truthy,因为上述原因。

>>> bool(9)
True

答案 1 :(得分:2)

请记住,is测试身份。您的d is Trued is False语句返回False,因为d9,而非TrueFalse。但是,d的真实值为True - 尝试运行bool(d)以获取其布尔值(提示:它将返回True)。

如其他地方所述,False,None,0和空字符串,列表,dicts,集合,元组等都被认为是假的。根据{{​​1}}和/或__nonzero__属性的内容,如果设置,对象也可能是假的。

答案 2 :(得分:1)

在您的示例中,整数在if语句中被视为 boolean 。任何非零整数都等于True。这在许多编程语言中很常见。

答案 3 :(得分:-1)

根据设计,Python会将大多数值评估为TRUE。只有一小部分被认为是假的。

当我们正在测试空值或迭代条件循环时,这最终成为一个非常好的功能。

参见文档中的5.1节!

https://docs.python.org/2/library/stdtypes.html