在我的代码中,我曾经相当频繁地进行类似 if a == b or a == c or a == d:
的比较。在某些时候,我发现这些可以很容易地缩短为 if a in {b, c, d}:
或 if a in (b, c, d):
if这些值不可散列。但是,我从未在其他任何人的代码中看到过这样的构造。这可能是因为:
==
方式比较慢。==
方式更像 pythonic。- 他们实际上做的事情略有不同。
- 碰巧我没有看过任何需要这两者的代码。
- 我看过它,只是忽略或忘记了它。
- 一个人不应该进行这样的比较,因为他的代码在其他地方应该会更好。
除了我,没有人想到过in
方式。
如果有的话,是什么原因?
最佳答案
对于简单值(即不是表达式或 NaN
s),if a == b or a == c
和 if 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/