我知道Python内置类型有一个“真实性”值,空字符串被认为是False
,同时考虑任何非空字符串True
.
这是有道理的
我可以使用内置函数检查这一点bool
.
>>> bool("")
False
>>> bool("dog")
True
在使用条件时,我还可以利用这些真实值。例如:
>>> if "dog":
... print("yes")
...
yes
这很令人困惑
这不适用于==
但运算符:
>>> "dog" == True
False
>>> "dog" == False
False
谁能解释为什么==
似乎与条件语句的行为不同?
See the 真值检验 https://docs.python.org/3/library/stdtypes.html#truth-value-testing and 比较 https://docs.python.org/3/library/stdtypes.html#comparisons文档的各个部分,摘录如下。
简而言之,大多数事情默认都是真实的,这就是为什么bool("dog")
是真的。这==
运算符比较两个对象的相等性,而不是比较它们的真实性,正如我假设您所期望的那样。
4.1.真值测试
任何对象都可以测试真值,用于 if 或 while 条件或作为下面布尔运算的操作数。
默认情况下,一个对象被认为是 true ,除非它的类定义了
要么是__bool__()
返回 False 或 a 的方法__len__()
方法
当用对象调用时返回零。
以下是大多数被视为 false 的内置对象:
- 常量定义为 false:
None
and False
- 任何数字类型的零:
0
, 0.0
, 0j
, Decimal(0)
, Fraction(0, 1)
- 空序列和集合:
''
, ()
, []
, {}
, set()
, range(0)
始终具有布尔结果的运算和内置函数
如果为 false,则返回 0 或 False,如果为 true,则返回 1 或 True,除非另有说明
指出。 (重要的例外:布尔运算or
and and
始终返回其操作数之一。)
4.3.比较
不同类型的对象,除了不同的数字类型之外,永远不会
比较相等。
...
类的不同实例通常比较为不相等
除非该类定义了__eq__()
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)