Python - 在运行时使用运算符

时间:2014-02-27 06:00:10

标签: python function math operators calculator

是否可以在运行时在两个变量之间插入一个操作(例如*+)? 没有这样做的我的解决方案是多个if,elif语句,但我不认为这是最有效的方法。

编辑:我的意思是我得到两个整数,我想对其中一个应用一个操作,例如x * y,但我想将*更改为另一个操作符(也许他们被称为函数?不确定)例如-+^基于输入。

这有意义吗?基本上把它想象成一个计算器。

4 个答案:

答案 0 :(得分:5)

我不确定这是否是你要找的,但operator模块有很多操作,例如addmul(相乘):

import operator

var_1 = 2
var_2 = 3

print(operator.add(var_1, var_2))
print(operator.mul(var_1, var_2))

将打印

5
6

答案 1 :(得分:4)

@ AaronHall是你正在寻找的答案,但为了完整起见,我提到你也可以使用eval

var_1 = 2
var_2 = 3
op = '+'
print eval('%s%s%s' % (var_1, op, var_2))

然而,eval is evil,所以要么不使用它,要么谨慎使用。

答案 2 :(得分:1)

要回答后续问题,例如,您可以继承int,然后实现__xor__取幂而不是应用按位或由^运算符调用:

import operator

class MyInt(int):
    def __xor__(self, other):
        return operator.pow(self, other)

然后:

>>> i = MyInt(2)
>>> i
2
>>> type(i)
<class '__main__.MyInt'>
>>> j = 3
>>> i^j
8

答案 3 :(得分:0)

如果你的运算符列表足够小,你可以使用lambdas。

def operator_factory(op):
    if op == '+':
        return lambda x,y: x + y
    elif op == '-':
        return lambda x,y: x - y
    elif op == '*':
        return lambda x,y: x * y
    elif op == '/':
        return lambda x,y: x / y
    elif op == '^':
        return lambda x,y: x ^ y

您的if语句可能取决于用户输入。然后你就这样使用它:

>>> f = operator_factory('+')
>>> f(2,3)
5