我应该在Python 3.x的if语句中使用'in'或'or'来检查多个值的变量吗?

Sal*_*osa 5 python performance if-statement python-3.x

假设我有以下,这是更好,更快,更Pythonic方法,为什么?

if x == 2 or x == 3 or x == 4:
    do following...
Run Code Online (Sandbox Code Playgroud)

要么 :

if x in (2, 3, 4):
    do following...
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 12

在Python 3(3.2及更高版本)中,您应该使用一:

if x in {2, 3, 4}:
Run Code Online (Sandbox Code Playgroud)

因为集合成员资格是O(1)测试,而不是O(N)的最坏情况性能,用于使用单独的or相等测试或使用元组中的成员资格进行测试.

在Python 3中,set literal将被优化为使用frozenset常量:

>>> import dis
>>> dis.dis(compile('x in {1, 2, 3}', '<file>', 'exec'))
  1           0 LOAD_NAME                0 (x)
              3 LOAD_CONST               4 (frozenset({1, 2, 3}))
              6 COMPARE_OP               6 (in)
              9 POP_TOP
             10 LOAD_CONST               3 (None)
             13 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)

请注意,此优化已添加到Python 3.2和Python 2或3.0或3.1中,您最好使用元组.对于少量元素,每次执行的集创建都会使查找时间的差异无效.