String python-将字符串与布尔值进行比较
我遇到了python将字符串与真/假进行比较的奇怪行为 我认为python会打印以下内容:String python-将字符串与布尔值进行比较,string,python-3.x,comparison,String,Python 3.x,Comparison,我遇到了python将字符串与真/假进行比较的奇怪行为 我认为python会打印以下内容: if "Test" == True: print("Hello1") 但事实并非如此。 所以我写了一些测试用例,但我不理解其中的一些 if "Test" == True: print("Hello1") if "Test" == False: print("Hello2") #This I understand if bool("Test") == True: pri
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也没有打印
- 为什么他会被打印出来,是不是对bool(“测试”)的演员阵容进行了暗示
字符串对象
“Test”
与对象True
(“Hello1”)不同字符串对象
“Test”
与对象False
(“Hello2”)不同但是字符串对象
“Test”
不是None
(“Hello5”)在前两次比较中,您要检查字符串“Test”
是否与对象True
或False具有相同的值。这是一种价值比较
如果它们具有不同的类型,比较将返回False
。在比较列表、数字等时,您也可以看到这一点:[1]==1
(false),(1,)==1]
(false)
在第三次和第四次比较中,您仍在进行值比较,但由于两侧都是同一类型(布尔值),因此将比较值
打印Hello5
,因为它不是空字符串“”
。您可以通过尝试“Test”!=无
,返回真
当涉及到大多数类时,它与None
进行比较(None
是Python的空值),Python的标准数据类型与它们的“空”值进行比较,它们是:
- 字符串的空字符串
“”
用于列表(类似于[]
用于元组,()
用于字典){}
对于整数和浮点0
if expression
视为对if bool(expression)
的隐式强制转换是正确的
幕后正在进行的是对类的(python2.x)或(python3.x)方法的评估。如果您改进答案以包含对象比较,那么它实际上比启用user762353更好。anwser应该始终独立运行。@M.T前四个比较不是比较对象,而是比较值。要比较对象(或者换句话说,标识)将是
“Test”为True
而不是“Test”==True
。我想这就是你的意思,但你的措辞模棱两可。请为将来的用户澄清您的答案。@M.T另外,另一个更正:None
不是(严格地说或其他)一个类;这是一个单身汉。换句话说,它位于类NoneType
的实例中,该实例只有一个允许的实例:None
。您应该从答案中删除该类的声明,因为它是虚假信息。除了我提到的事情之外,这是一个非常好的答案。