Python中为什么单个变量不能一次比对多个值,需逐个校验?
核心原因
本质是Python中or运算符的求值规则导致的差异。
- 第一种写法的问题
括号里的("apple" or "Orange" or "Mango")会先独立运算。Python的or遵循短路求值规则:会从左到右依次判断表达式的布尔值,返回第一个为「真」的结果,后面的表达式直接忽略不计算。
在Python中所有非空字符串的布尔值都是True,所以第一个值"apple"已经是真值,整个括号的运算结果直接就是"apple",所以你的第一个判断逻辑实际等价于:
if x == "apple":
自然只有输入apple的时候才会返回正确结果。
- 第二种写法的逻辑
你把相等判断和or拆开写之后,完整的判断逻辑是(x == "apple") or (x == "Orange") or (x == "Mango"),每一个相等判断都是独立计算的:如果第一个相等判断不成立,才会继续判断下一个,直到找到成立的条件或者全部判断完成,完全符合你要判断x是否是三个值中任意一个的需求,所以运行正常。
拓展优化写法
日常写这种多值匹配的判断,更简洁的写法是用成员运算符in,待匹配值较多时性能也更高:
x = input("Type a fruit's name: ") if x in {"apple", "Orange", "Mango"}: print("that's a fruit") else: print("Not a fruit")
内容的提问来源于stack exchange,提问作者Avinash
相关产品推荐
相关产品推荐

