一个 and 语句 returns True 而它应该 return False

An and statement returns True when it should return False

我在 if 语句中比较两个字符串,我希望它们都是 False,但有一个是 True。

参见代码示例:

z = 'Test'
x = 'Test1234'

z and x == 'Test'
False

x and z == 'Test'
True

为什么? 我不可能是第一个看到这个的人,但我找不到其他帖子。我想我用错了搜索词。

提前致谢。

测试表达式中的非布尔变量被评估为布尔值,如果字符串不是 None 且不是空字符串,则该布尔值对于字符串为 True;例如布尔('test')=真;布尔('')=假;布尔(None)=假。

默认情况下,一个对象被认为是 true,除非它的 class 定义了 bool() 方法 returns False 或 len() 方法 returns 零,当调用对象时。参见 built-in types

z = 'Test'
x = 'Test1234'

z and x == 'Test' # False
x and z == 'Test' # True

使用 operator precedence 的表达式 x and z == 'Test' 被计算为 x and (z == 'Test') -- 为清楚起见添加 ()。单独的 'x' 被评估为布尔表达式,因此与 bool(x) 相同,因此表达式变为 bool(x) and (z == 'Test').

这被评估为 True and ('Test' == 'Test')True and True 或只是 True。