Alt*_*yyr 6 string comparison python-3.x
我遇到了一个奇怪的python行为,比较一个字符串与True/False.
我以为python会打印如下:
if "Test" == True:
print("Hello1")
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.所以我写了一些测试用例,我不明白其中的一些.
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")
Run Code Online (Sandbox Code Playgroud)
产量
>> Hello3
>> Hello4
>> Hello5
Run Code Online (Sandbox Code Playgroud)
所以我不明白:
在前两次比较中,您检查字符串是否"Test"
与对象True
或具有相同的值False
。这是一个价值比较。
如果它们具有不同的类型,则比较将返回False
。当比较列表、数字等时,您也可以看到这一点:([1]==1
假),(1,)==[1]
(假)。
在第三次和第四次比较中,您仍在进行值比较,但由于双方的类型相同(布尔值),因此它将比较值。
Hello5
被打印,因为它不是空字符串""
。您可以通过尝试看到这一点"Test" != None
,它会返回True
。
None
虽然它是与大多数类(Python 的 null 值)进行比较None
,但 Python 的标准数据类型是与它们的“null”值进行比较,即:
""
,[]
对于列表(()
对于元组、{}
字典类似),0
对于整数和浮点数,就像布尔比较一样。if expression
因此,将其视为隐式强制转换并没有错if bool(expression)
。
幕后发生的是类的__non-zero__
(python2.x) 或(python3.x) 方法的评估。__bool__
归档时间: |
|
查看次数: |
4272 次 |
最近记录: |