使用字符串作为运算符?

Dan*_*ook 1 python performance operators repeat

例如,假设我有一堆这样的赋值语句:

if operator == '==':
   if a == b:
       c += 5
elif operator == '>':
   if a > b:
       c += 5
elif operator == '<':
   if a < b:
       c += 5
Run Code Online (Sandbox Code Playgroud)

我给出的if嵌套if语句和赋值只是例子,但在我写的程序中,它们真的很长.只是在操作员不同的地方出现了一个小小的变化,所以我不想在所有这些条件下一遍又一遍地重复相同的长代码.有太多的条件,代码将重复多次..那么有一个"更快"的方法来做到这一点?我可以将字符串定义为运算符吗?还是更好的方法?

roi*_*ppi 6

怎么样:

from operator import *

str_ops = {'<':lt,'>':gt,'==':eq} # etc
op = str_ops.get(my_operator) #where my_operator was previously your 'operator'
assert op is not None #or raise your own exception
if op(a,b):
    c+=5
Run Code Online (Sandbox Code Playgroud)

而且,如果您想要优雅地处理伪操作员my_operator,您可以:

op = str_ops.get(my_operator, lambda x,y: None) #fallback: do-nothing operator
Run Code Online (Sandbox Code Playgroud)

这种方法的奖金:

  • 一个if声明.无论您处理多少运营商.
  • O(1)行为,而O(n)与分支if/elif语句相反.
  • dict是非常声明的:字符串转到运算符.
  • 不重复自己.