“a == x 或 y 或 z”谬误
当尝试将一个变量与多个值进行比较时,很容易使用Python 的逻辑运算符,如:
if a == x or y or z: # Incorrect
但是,该表达式的计算结果始终为 True,无论 a 的值如何。这是因为在此上下文中“或”运算符的行为不符合预期。
“或”运算符如何工作
Python 的“或”运算符 (|)如果任何操作数为 True,则计算结果为 True。因此,在上面的表达式中,由于 x、y 或 z 之一始终为 True(Python 中非空值为 True),因此无论 a 的值如何,表达式的计算结果均为 True。
比较多个值的正确方法
要正确地将一个变量与多个值进行比较,有几种方法选项:
使用显式“或”运算符分别与每个值进行比较:
if a == x or a == y or a == z: # Correct
创建有效值的集合或列表,并使用“in”运算符检查成员资格:
if a in {"Kevin", "Jon", "Inbar"}: # Correct
使用生成器表达式“any()”显式检查每个值:
if any(a == auth for auth in ["Kevin", "Jon", "Inbar"]): # Correct
考虑性能
为了性能,使用带有“in”运算符的集合或列表通常是最快的选择。使用“any()”的生成器表达式最冗长且最慢。
用法示例
仅向授权用户授予访问权限:
authorized_names = {"Kevin", "Jon", "Inbar"} name = input("Please enter your name: ") if name in authorized_names: print("Access granted.") else: print("Access denied.")
以上是为什么 Python 中 `a == x or y or z` 总是计算为 True?的详细内容。更多信息请关注PHP中文网其他相关文章!