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

execを使用できます。

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