编程时总是困扰我的事实是我编程的语言不支持灵活的or
运算符。
使用标准编码语法编写的这段代码:
if(variable == (value1 or value2 or value3)) { ... }
当然,这不起作用,为了获得理想的结果,你必须做这样的事情:
if(
variable = value1 or
variable = value2 or
variable = value3
) { ... }
在我看来,效率低下(或者只是丑陋)。
我的问题:是否可以使代码片段工作而不会像代码片段2那样低效?
(目前属于Python)
答案 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))