如何在IF语句等价物

时间:2015-12-07 21:20:00

标签: python performance python-3.x

编程时总是困扰我的事实是我编程的语言不支持灵活的or运算符。

使用标准编码语法编写的这段代码:

if(variable == (value1 or value2 or value3)) { ... }

当然,这不起作用,为了获得理想的结果,你必须做这样的事情:

if(
  variable = value1 or
  variable = value2 or
  variable = value3
) { ... }

在我看来,效率低下(或者只是丑陋)。

我的问题:是否可以使代码片段工作而不会像代码片段2那样低效?

(目前属于Python)

1 个答案:

答案 0 :(得分:4)

这是您使用any的地方。

if any(variable==value for value in (value1, value2, value3)):

您也可以使用in来举例说明。

if variable in (value1, value2, value3):

如果这是一个效率问题,那么从这个反汇编中可以看出in要快得多。

dis.dis('1 in (2, 3, 4, 1)')
  1           0 LOAD_CONST               0 (1)
              3 LOAD_CONST               4 ((2, 3, 4, 1))
              6 COMPARE_OP               6 (in)
              9 RETURN_VALUE

dis.dis('any(1==x for x in (2, 3, 4, 1))')
  1           0 LOAD_NAME                0 (any)
              3 LOAD_CONST               0 (<code object <genexpr> at 0x036C5200, file "<dis>", line 1>)
              6 LOAD_CONST               1 ('<genexpr>')
              9 MAKE_FUNCTION            0
             12 LOAD_CONST               6 ((2, 3, 4, 1))
             15 GET_ITER
             16 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             19 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             22 RETURN_VALUE

因此,in非常棒,如果您只是对变量进行简单比较,any可以提供更大的灵活性,例如any可能无法做到的事情与in(注意:这是一个不好的例子,但是周一晚了),看看这个:

if any(0<x<y for y in (1, 3, 5, 6, -1))