我写了这样一个函数,op
给出了一个像'+','-','*','/'
或更多的操作符号,代码“添加”所有使用给定运算符的东西,
以下是代码:
def arithmetic(op,*args):
result = args[0]
for x in args[1:]:
if op =='+':
result += x
elif op == '-':
result -= x
elif op == '*':
result *= x
elif op == '/':
result /= x
return result
有没有办法直接使用+,-,*,/
?所以我不必写一个If-Else语句?
答案 0 :(得分:10)
您可以使用相应的operators:
import operator
def arithmetic(opname, *args):
op = {'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.div}[opname]
result = args[0]
for x in args[1:]:
result = op(result, x)
return result
或更短,reduce
:
import operator,functools
def arithmetic(opname, arg0, *args):
op = {'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.div}[opname]
return functools.reduce(op, args, arg0)
答案 1 :(得分:3)
我认为您正在寻找与reduce
结合的内置operator
功能:
import operator
a = range(10)
reduce(operator.add,a) #45
reduce(operator.sub,a) #-45
reduce(operator.mul,a) #0 -- first element is 0.
reduce(operator.div,a) #0 -- first element is 0.
当然,如果您想使用字符串执行此操作,可以使用dict将字符串映射到操作:
operations = {'+':operator.add,'-':operator.sub,} # ...
然后它变成了:
reduce(operations[your_operator],a)
答案 2 :(得分:1)
对于+
运算符,您具有内置的sum
函数。
答案 3 :(得分:-1)
您可以使用exec:
def arithmetic(op, *args):
result = args[0]
for x in args[1:]:
exec('result ' + op + '= x')
return result