Python ::将string转换为运算符
如何将string(如“+”)join运算符中? 谢谢!
使用查找表:
import operator ops = { "+": operator.add, "-": operator.sub } # etc. print ops["+"](1,1) # prints 2
import operator def get_operator_fn(op): return { '+' : operator.add, '-' : operator.sub, '*' : operator.mul, '/' : operator.div, '%' : operator.mod, '^' : operator.xor, }[op] def eval_binary_expr(op1, oper, op2): op1,op2 = int(op1), int(op2) return get_operator_fn(oper)(op1, op2) print eval_binary_expr(*("1 + 3".split())) print eval_binary_expr(*("1 * 3".split())) print eval_binary_expr(*("1 % 3".split())) print eval_binary_expr(*("1 ^ 3".split()))
你可以尝试使用eval(),但是如果string不是从你那里来的,那就很危险。 否则,你可能会考虑创build一个字典:
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: xy)}
等等…然后打电话
ops['+'] (1,2)
或者,对于用户input:
if ops.haskey(userop): val = ops[userop](userx,usery) else: pass #something about wrong operator
在我看来,Amnon提出的答案是正确的。
不过,您也可能会对这篇关于mathparsing器的文章感兴趣: http : //effbot.org/zone/simple-top-down-parsing.htm
每个操作员都有一个对应的魔法
OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'} def apply_operator(a, op, b): method = '__%s__' % OPERATORS[op] return getattr(b, method)(a) apply_operator(1, '+', 2)
你可以像这样使用eval
:
eval("+")