例如,假设我有一堆这样的赋值语句:
if operator == '==':
if a == b:
c += 5
elif operator == '>':
if a > b:
c += 5
elif operator == '<':
if a < b:
c += 5
我给出的if if if语句和赋值只是示例,但在我写的程序中,它们真的很长。只是在操作员不同的地方出现了一个小小的变化,所以我不想在所有这些条件下一遍又一遍地重复相同的长代码。有太多的条件,代码将重复多次..那么有一个“更快”的方法来做到这一点?我可以将字符串定义为运算符吗?还是更好的方法?
答案 0 :(得分: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
而且,如果你想在my_operator
中优雅地处理伪造的算子,你可以这样做:
op = str_ops.get(my_operator, lambda x,y: None) #fallback: do-nothing operator
这种方法的奖励:
if
声明。无论您处理多少运营商。 dict
非常具有声明性:此字符串转到此运算符。答案 1 :(得分:3)
您可以有效地使用and
和or
运算符,例如
if (operator == '==' and a == b) or (operator == '>' and a > b) \
or (operator == '<' and a < b):
c += 5
答案 2 :(得分:2)
作为替代解决方案,如果您可以信任运算符字符串的来源(或者有某种方法来验证它),则可以使用eval
。但是在使用eval
时你必须非常小心;如果您不信任输入源,这可能是一个很大的安全风险。
if eval("a %s b" % operator):
c += 5