首页 >后端开发 >Python教程 >为什么 Python 中 `a == x or y or z` 总是计算为 True?

为什么 Python 中 `a == x or y or z` 总是计算为 True?

Linda Hamilton
Linda Hamilton原创
2024-12-31 04:35:17740浏览

Why Does `a == x or y or z` Always Evaluate to True in Python?

“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()":

使用生成器表达式“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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn