gpt4 book ai didi

string - python - 将字符串与 bool 值进行比较

转载 作者:行者123 更新时间:2023-12-02 08:16:06 24 4
gpt4 key购买 nike

我遇到了 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" 是否与对象 TrueFalse 具有相同的值。这是一个值(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com