例如,假设我有一堆这样的赋值语句:
if operator == '==':
if a == b:
c += 5
elif operator == '>':
if a > b:
c += 5
elif operator == '<':
if a < b:
c += 5
我给出的 if 嵌套 if 语句和赋值只是示例,但在我正在编写的程序中,它们确实很长。运算符不同的地方只有一个小的变化,所以我不想为了所有这些条件而一遍又一遍地重复相同的长代码。条件太多,代码会重复很多次。那么有没有“更快”的方法来做到这一点?我可以将字符串定义为运算符吗?或者有什么更好的方法吗?
请您参考如下方法:
怎么样:
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
而且,如果你想优雅地处理 my_operator 中的伪造运算符,你可以这样做:
op = str_ops.get(my_operator, lambda x,y: None) #fallback: do-nothing operator
这种方法的好处:
- 一个
if语句。无论您处理多少运算符(operator)。 - O(1) 的行为,而不是 O(n) 的分支 if/elif 语句。
dict非常明确:this 字符串转到 this 运算符。- 不重复自己。
