我正在使用具有以下行为的代码。假设我有一个变量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
如果有人可以向我解释这一点并指出我有任何误解,我将不胜感激。非常感谢你。
答案 0 :(得分:3)
引自official Python documentation,
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:
False
,None
,数字零所有类型,空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。 所有其他值都被解释为true。
if
声明属于Booelan操作的上下文。由于d
9
不属于任何虚假值,因此被视为Truthy。
您可以像这样确认
>>> all(bool(value) is False for value in (False, 0, +0, -0, "", (), [], {}, set()))
True
虽然您使用9
和True
测试确定的值False
既不是d is True
也不是d is False
,但它被视为Truthy,因为上述原因。
>>> bool(9)
True
答案 1 :(得分:2)
请记住,is
测试身份。您的d is True
和d is False
语句返回False,因为d
为9
,而非True
或False
。但是,d
的真实值为True - 尝试运行bool(d)
以获取其布尔值(提示:它将返回True
)。
如其他地方所述,False,None,0和空字符串,列表,dicts,集合,元组等都被认为是假的。根据{{1}}和/或__nonzero__
属性的内容,如果设置,对象也可能是假的。
答案 2 :(得分:1)
在您的示例中,整数在if
语句中被视为 boolean 。任何非零整数都等于True
。这在许多编程语言中很常见。
答案 3 :(得分:-1)
根据设计,Python会将大多数值评估为TRUE。只有一小部分被认为是假的。
当我们正在测试空值或迭代条件循环时,这最终成为一个非常好的功能。
参见文档中的5.1节!