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

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

Linda Hamilton
发布: 2024-12-31 04:35:17
原创
744 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板