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("+")