2

我写了一个这样的函数,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 语句?

4

4 回答 4

10

您可以使用相应的运算符

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)
于 2012-09-21T12:35:33.893 回答
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)
于 2012-09-21T12:33:55.057 回答
1

对于+操作员,您具有内置sum功能。

于 2012-09-21T12:35:35.900 回答
-1

您可以使用执行:

def arithmetic(op, *args):
 result = args[0]
 for x in args[1:]:
   exec('result ' + op + '= x')
 return result
于 2012-09-21T12:37:40.423 回答