我遇到了 python 比较字符串与 True/False 的奇怪行为。
我认为 python 会打印以下内容:
if "Test" == True:
print("Hello1")
但事实并非如此。 所以我写了一些测试用例,但其中一些我不明白。
if "Test" == True:
print("Hello1")
if "Test" == False:
print("Hello2")
#This I understand
if bool("Test") == True:
print("Hello3")
#This I understand too
if bool("") == False:
print("Hello4")
if "Test":
print("Hello5")
输出
>> Hello3
>> Hello4
>> Hello5
所以我不明白:
- 如果 Hello1 没有打印出来,为什么 Hello2 也没有打印出来?
- 为什么打印 Hello5,是否隐式转换为 bool("Test")?
最佳答案
在前两次比较中,您将检查字符串 "Test"
是否与对象 True
或 False
具有相同的值。这是一个值(value)比较。
如果它们具有不同的类型,则比较将返回False
。在比较列表、数字等时,您也可以看到这一点:[1]==1
(false)、(1,)==[1]
(false)。
在第三次和第四次比较中,您仍在进行值比较,但由于双方的类型相同( bool 值),因此它将比较值。
Hello5
被打印,因为它不是空字符串 ""
。您可以通过尝试 "Test"!= None
来查看这一点,它会返回 True
。
虽然对于大多数类来说它是与 None
进行比较(None
是 Python 的 null 值),但 Python 的标准数据类型会与其“null”值进行比较,分别是:
- 字符串的空字符串
""
, []
用于列表(类似()
用于元组,{}
用于字典),0
用于整数和 float ,
就像 bool 比较一样。因此,将 if expression
视为对 if bool(expression)
的隐式转换并没有错。
幕后发生的事情是对 __non-zero__
的评估(python2.x) 或 __bool__
(python3.x) 类的方法。
关于string - python - 将字符串与 bool 值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34218915/