在变量中使用二进制运算符号

时间:2014-01-10 18:59:42

标签: python

我的问题是,如果我有一个名为op的变量,它可以包含加号,减号等,我该如何利用该变量进行计算?而不是有多个if语句我怎么能做这样的事情

if op in ['+','-', '*', '/']:
    return x op y
else:
    print("ERROR")

而不是例如

if op == "+":
    return x + y
elif op == "-":
    return x - y
....
....

我尝试过将op设为int但它不起作用,是否有解决方案,或者我必须检查op是否有任何可能的迹象?

编辑: 如何用大于,小于或等于的符号做同样的事情?

检查是否是这些中的任何一个`[“=”,“<”,“>”]

3 个答案:

答案 0 :(得分:3)

您可以创建从符号到operator函数的映射,该函数对应于op:

import operator
ops = {
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul, 
    '/': operator.div,
}

然后:

def apply_op(op, val1, val2):
    return ops[op](val1, val2)

答案 1 :(得分:1)

您应该查看operator模块。它包含每个Python运算符的函数:

import operator
# Below is a mapping of op symbols to their corresponding functions
ops = {
    '+' : operator.add, 
    '-' : operator.sub, 
    '*' : operator.mul, 
    '/' : operator.truediv, 
    '==' : operator.eq, 
    '>' : operator.gt, 
    '<' : operator.lt
}
def func(op, x, y):
    try:
        return ops[op](x, y)
    except KeyError:
        return 'ERROR'

以下是演示:

>>> func('+', 2, 1)
3
>>> func('-', 2, 1)
1
>>> func('*', 2, 1)
2
>>> func('/', 2, 1)
2.0
>>> func('==', 2, 1)
False
>>> func('>', 2, 1)
True
>>> func('<', 2, 1)
False
>>> func('&', 2, 1) # Just to demonstrate
'ERROR'
>>>

答案 2 :(得分:0)

您可以执行类似

的操作
eval('%d %s %d' % (x, op, y))

编辑:取决于问题的微不足道, 你会

assert isinstance(x, int)
assert isinstance(y, int)