是否可以在运行时在两个变量之间插入一个操作(例如*
,+
)?
没有这样做的我的解决方案是多个if,elif语句,但我不认为这是最有效的方法。
x * y
,但我想将*
更改为另一个操作符(也许他们被称为函数?不确定)例如-
,+
,^
基于输入。
这有意义吗?基本上把它想象成一个计算器。
答案 0 :(得分:5)
我不确定这是否是你要找的,但operator模块有很多操作,例如add
和mul
(相乘):
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