为什么多个 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中文网其他相关文章!