不明白为什么当变量为整数时 if 条件的计算结果为 True
Do not understand why if condition evaluates to True when variable is integer
我正在使用表现出以下行为的代码。假设我有一个变量 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
如果有人能向我解释这一点并指出我的任何误解,我将不胜感激。非常感谢。
记住,is
测试身份。您的 d is True
和 d is False
语句是 returning False 因为 d
是 9
,而不是 True
或 False
。但是,d
的真实值是 True - 尝试 运行 bool(d)
来获取它的布尔值(提示:它会 return True
)。
如其他地方所述,False、None、0 和空字符串、列表、字典、集合、元组等都被认为是假的。对象也可以是假的,这取决于它们 __nonzero__
and/or __len__
属性的内容,如果设置的话。
在您的示例中,整数在 if
语句中被视为 布尔值 。任何非零整数都等同于 True
。这在许多编程语言中都很常见。
根据设计,Python 将大多数值评估为 TRUE。只有非常小的一组被认为是假的。
当我们执行测试空值或迭代条件循环等操作时,这最终成为一个非常好的功能。
请参阅文档中的第 5.1 节!
引用自 official Python documentation,
In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: False
, None
, numeric zero of all types, and empty strings and containers (including strings, tuples, lists, dictionaries, sets and frozensets). All other values are interpreted as 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
我正在使用表现出以下行为的代码。假设我有一个变量 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
如果有人能向我解释这一点并指出我的任何误解,我将不胜感激。非常感谢。
记住,is
测试身份。您的 d is True
和 d is False
语句是 returning False 因为 d
是 9
,而不是 True
或 False
。但是,d
的真实值是 True - 尝试 运行 bool(d)
来获取它的布尔值(提示:它会 return True
)。
如其他地方所述,False、None、0 和空字符串、列表、字典、集合、元组等都被认为是假的。对象也可以是假的,这取决于它们 __nonzero__
and/or __len__
属性的内容,如果设置的话。
在您的示例中,整数在 if
语句中被视为 布尔值 。任何非零整数都等同于 True
。这在许多编程语言中都很常见。
根据设计,Python 将大多数值评估为 TRUE。只有非常小的一组被认为是假的。
当我们执行测试空值或迭代条件循环等操作时,这最终成为一个非常好的功能。
请参阅文档中的第 5.1 节!
引用自 official Python documentation,
In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false:
False
,None
, numeric zero of all types, and empty strings and containers (including strings, tuples, lists, dictionaries, sets and frozensets). All other values are interpreted as 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