0

Pythonで4つの引数を持つ関数を書こうとしています

def sequence(operation, start, n, term):

ここで、operation は関数、start はシーケンスの開始番号、n はシーケンスの最後の番号、term はシーケンス内の項を操作する関数です。

例えば

>>> sequence(add, 2, 10, square)

2、3、4、...、10 の 2 乗の合計を返します

とすれば:

def square(x):
    return x * x
4

4 に答える 4

2
reduce(lambda a,b: a+b, map(square, range(2,11)))
于 2011-09-09T11:16:17.197 に答える
1
def sequence(operation, start, n, term):
    return reduce(operation, map(term, range(start, n+1)))

Python の range 関数は半開きです。range(start, stop) は、start から stop-1 までの整数のリストを返します。たとえば、次のようになります。

>>> range(2,10)
[2,3,4,5,6,7,8,9]

したがって、問題を解決するには range(start, n+1) が必要です。

関数 "term" をこの範囲内の各整数に適用するには、組み込み関数マップを使用します。

>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]

関数の最後の部分には、組み込み関数 reduce が必要です。この関数は、関数、反復可能オブジェクト、およびオプションの初期値 (このインスタンスでは必要ありません) を引数として取ります。

reduce は、与えられた関数を iterable の最初の 2 つの要素に適用します。次に、最初の計算の結果と iterable の 3 番目の要素に関数を適用します。

たとえば、次のようになります。

>>> from operator import add
>>> reduce(add, [4, 9, 16, 25])

...は次と同等です:

>>> add( add( add(4, 9), 16), 25)

... と:

>>> reduce(add, [4, 9, 16, 25, 36, 49, 64, 81, 100])

...は次と同等です:

>>> add( add( add( add( add( add( add( add(4, 9), 16), 25), 36), 49), 64), 81), 100)   
于 2011-09-09T12:05:56.567 に答える
0

Python 組み込み関数 rangereduceおよびを使用して、ワンライナーでシーケンスを定義できますmap

于 2011-09-09T10:45:28.523 に答える
0
from operator import add,mul

def square(x):  return x * x


def sequence(oper,m,n,func):
    if oper not in (add,mul):
        return None
    return reduce(lambda a,b: oper(a,func(b)),
                  xrange(m,n+1),
                  0 if oper==add else 1)


print sequence(add, 3,4, square)
print sequence(mul,2,3,square)
print sequence('qq',10,110,square)

結果

25
36
None
于 2011-09-09T12:23:32.690 に答える