python - 比较字符串和布尔值
python - compare string with boolean
我遇到了 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") 的转换是隐式的吗?
在 Hello1、Hello2 和 Hello5 的情况下,存在对象比较而不是布尔比较。
也就是说
字符串对象 "Test"
与对象 True
("Hello1")
不同
字符串对象 "Test"
与对象 False
("Hello2")
不同
但是字符串对象 "Test"
不是 None
("Hello5")
在前两次比较中,您正在检查字符串 "Test"
是否与对象 True
或 False
具有相同的值。这是一个价值比较。
如果它们具有不同的类型,则比较将 return False
。在比较列表、数字等时,您也可以看到这一点:[1]==1
(假),(1,)==[1]
(假)。
第三次和第四次比较,你还是在做一个值的比较,但是由于两边都是相同的类型(boolean),所以会比较值。
打印 Hello5
是因为它不是空字符串 ""
。您可以通过尝试 "Test" != None
来看到这一点,其中 returns True
。
虽然它是对大多数 classes 的 None
的比较(None
是 Python 的空值),Python的标准数据类型与其 "null" 值进行比较,它们是:
- 空字符串
""
为字符串,
[]
用于列表(类似于 ()
用于元组,{}
用于字典),
0
对于整数和浮点数,
就像一个布尔比较。因此,将 if expression
视为对 if bool(expression)
.
的隐式转换并没有错
幕后发生的事情是对 class.
的 __non-zero__
(python2.x) or __bool__
(python3.x) 方法的求值
我遇到了 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") 的转换是隐式的吗?
在 Hello1、Hello2 和 Hello5 的情况下,存在对象比较而不是布尔比较。
也就是说
字符串对象 "Test"
与对象 True
("Hello1")
不同
字符串对象 "Test"
与对象 False
("Hello2")
不同
但是字符串对象 "Test"
不是 None
("Hello5")
在前两次比较中,您正在检查字符串 "Test"
是否与对象 True
或 False
具有相同的值。这是一个价值比较。
如果它们具有不同的类型,则比较将 return False
。在比较列表、数字等时,您也可以看到这一点:[1]==1
(假),(1,)==[1]
(假)。
第三次和第四次比较,你还是在做一个值的比较,但是由于两边都是相同的类型(boolean),所以会比较值。
打印Hello5
是因为它不是空字符串 ""
。您可以通过尝试 "Test" != None
来看到这一点,其中 returns True
。
虽然它是对大多数 classes 的 None
的比较(None
是 Python 的空值),Python的标准数据类型与其 "null" 值进行比较,它们是:
- 空字符串
""
为字符串, []
用于列表(类似于()
用于元组,{}
用于字典),0
对于整数和浮点数,
就像一个布尔比较。因此,将 if expression
视为对 if bool(expression)
.
幕后发生的事情是对 class.
的__non-zero__
(python2.x) or __bool__
(python3.x) 方法的求值