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

标签 string python-3.x comparison

我遇到了 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/

相关文章:

string - 读外国文字

python - 在python中以一定间隔从右边拆分一个字符串

java - 使用snakeYaml解析字符串数组

python - 在嵌套列表列表中打乱特定元素

c - 字符串比较和长度

sql - 比较 SQL 中的元组

java - 如何在 StringTokenizer 中随机访问第 n 个元素

python - VSCode : The Python path in your debug configuration is invalid

python - 找到包含列表中所有角度的最小范围

python - python中的计数器可以这样比较吗?