一个 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。
我在 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。