将字符串转换为运算符

hwo*_*557 31 python

如何将诸如"+"之类的字符串转换为运算符加?谢谢!

Amn*_*non 78

使用查找表:

import operator
ops = { "+": operator.add, "-": operator.sub } # etc.

print ops["+"](1,1) # prints 2 
Run Code Online (Sandbox Code Playgroud)


Pau*_*McG 15

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()))
Run Code Online (Sandbox Code Playgroud)

  • 对于Python3,您还必须将`operator.div`更改为`operator.truediv`,并修复所有打印语句。 (2认同)

小智 7

如何使用查找字典,但使用 lambdas 而不是运算符库。

op = {'+': lambda x, y: x + y,
      '-': lambda x, y: x - y}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

print(op['+'](1,2))
Run Code Online (Sandbox Code Playgroud)

它会输出:

3
Run Code Online (Sandbox Code Playgroud)


Vin*_*kal 6

每个操作符都有一个对应的魔术方法

OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'}

def apply_operator(a, op, b):

    method = '__%s__' % OPERATORS[op]
    return getattr(b, method)(a)

apply_operator(1, '+', 2)
Run Code Online (Sandbox Code Playgroud)


Krz*_*icz 5

您可以尝试使用eval(),但如果字符串不是来自您,则会很危险.否则你可以考虑创建一个字典:

ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}
Run Code Online (Sandbox Code Playgroud)

等...然后打电话

ops['+'] (1,2)
Run Code Online (Sandbox Code Playgroud) 或者,对于用户输入:

if ops.haskey(userop):
    val = ops[userop](userx,usery)
else:
    pass #something about wrong operator
Run Code Online (Sandbox Code Playgroud)