python - 与 Python 的 `in` 运算符相关的混淆

标签 python

这个问题在这里已经有了答案:





Unexpected result from `in` operator - Python [duplicate]

(3 个回答)


去年关闭。




我发现 Python 的 in 有奇怪的行为运算符(operator)

d = {}
'k' in d == False # False! 
我认为这是因为优先级:
('k' in d) == False # True, it's okay
'k' in (d == False) # Error, it's also okay
但是,什么优先级评估以下表达式呢?
d = {}
'k' in d == False
如果是因为优先级错误,为什么它不会触发错误,例如:
'k' in (d == False)
换句话说,这个表达式在 Python 的底层发生了什么?
'k' in d == False

最佳答案

in被认为是一个比较运算符,因此它受比较链的影响。

'k' in d == False
相当于
'k' in d and d == False
因为两者 in==是比较运算符。
不过,您几乎不需要直接与 bool 文字进行比较。这里的“正确”表达式是 'k' not in d .

作为引用,这在 6.10. Comparisons 下的 Python 文档中有所描述。 :
comparison    ::=  or_expr (comp_operator or_expr)*
comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "!="
                   | "is" ["not"] | ["not"] "in"


Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).

关于python - 与 Python 的 `in` 运算符相关的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63191845/

相关文章:

python - 如何使用 Python、Requests 和 Xpath 抓取网站?

python - 通过 CGI 在 cPanel 上部署 Python 应用程序 - SuExec 和 500 错误

Python Apache Beam : date value out of range

python - PyAudio 无法在 'unable to open slave' 的 Ubuntu 14.04 上使用麦克风

python - Celery 拒绝反序列化我的自定义序列化内容并抛出 ContentDisallowed Exception

python - 如何将 Python Dict 映射到 Big Query Schema

python - 如何使用 Python (Windows Vista) 检索列表中文件的标签?

python 拆分字符串两次

python - 如何将 4 个 while 三角形循环放在一起以生成 "diamond"?

python - 如何在与应用程序断开连接后释放 Bokeh 服务器(出现错误 : port 5006 is already in use)