首页 >后端开发 >Python教程 >为什么 Python 中的多个'或”运算符会产生意外的布尔结果?

为什么 Python 中的多个'或”运算符会产生意外的布尔结果?

Linda Hamilton
Linda Hamilton原创
2024-12-31 03:44:09992浏览

Why Do Multiple `or` Operators in Python Produce Unexpected Boolean Results?

为什么多个 Or 运算符会产生意外结果

在 Python 中,计算涉及多个 or 运算符的表达式可能会产生误导。例如,考虑以下代码行:

if name == "Kevin" or "Jon" or "Inbar":

此行旨在向未经授权的用户授予访问权限,但实际上,它允许所有用户。要理解其中的原因,我们需要检查运算符的行为。

多个 Or 的问题

在英语中,“or”连接多个子句,表示至少有一个一定是真的。然而,在Python中,像“A或B或C”这样的表达式被解析为“(A或B)或C”。这意味着仅计算第一个表达式。如果为 true,则整个表达式为 true。

解决方案 1:多个相等运算符

要正确将“name”与每个授权用户进行比较,请使用多个相等运算符:

if name == "Kevin" or name == "Jon" or name == "Inbar":

解决方案 2:设置成员资格

另一种解决方案是使用一组授权名称并检查成员资格:

authorized = {"Kevin", "Jon", "Inbar"}
if name in authorized:

解决方案 3:任何操作员

any() 函数还可以用于迭代授权名称,如果其中任何一个匹配,则返回 True "name":

authorized = ["Kevin", "Jon", "Inbar"]
if any(name == auth for auth in authorized):

性能

在这三种解决方案中,集合成员资格提供了最佳性能,其次是多个相等运算符。使用any() 效率最低。

以上是为什么 Python 中的多个'或”运算符会产生意外的布尔结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

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