python - 如果 a == b 或 a == c : vs if a in {b, c}:

标签 python

在我的代码中,我曾经相当频繁地进行类似 if a == b or a == c or a == d: 的比较。在某些时候,我发现这些可以很容易地缩短为 if a in {b, c, d}:if a in (b, c, d): if这些值不可散列。但是,我从未在其他任何人的代码中看到过这样的构造。这可能是因为:

  1. == 方式比较慢。
  2. == 方式更像 pythonic。
  3. 他们实际上做的事情略有不同。
  4. 碰巧我没有看过任何需要这两者的代码。
  5. 我看过它,只是忽略或忘记了它。
  6. 一个人不应该进行这样的比较,因为他的代码在其他地方应该会更好。
  7. 除了我,没有人想到过in方式。

如果有的话,是什么原因?

最佳答案

对于简单值(即不是表达式或 NaN s),if a == b or a == cif a in <iterable of b and c>是等价的。

如果值是可散列的,最好使用 in使用 set literal 而不是元组或列表文字:

if a in {b, c}: ...

CPython 的 peephole optimiser通常能够用缓存的 frozenset() 替换它对象和针对集合的成员资格测试是 O(1) 操作。

关于python - 如果 a == b 或 a == c : vs if a in {b, c}:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45800403/

相关文章:

python - 有没有办法在运行Python时出错后访问变量

python - 从另一个 Dataframe 创建 Dataframe

套接字中的 Java 客户端

python - Django - 设置具有许多相似字段的模型的最佳方法是什么?

python - 检测当前shell是否为python中的powershell

python - 为什么模块全局分配与类/字典不同的简单类型?

python - 在 python 中读取 SQL 表

python - 使用 pyinstaller 导出 .py 会引发 import pandas 错误

python - PyPy 会自己翻译吗?

在 Unix 系统上使用时,Python Ctypes 函数调用段错误