python関数の二関数式プログラミング

1963 ワード

python関数の二関数式プログラミング
1lambda
書式:
lambda [arg1[, arg2, ... argN]]:expression

pythonではlambdaキーワードで匿名関数を作成できます.匿名は標準的な方法で宣言する必要がないからです.完全なlambda文は、宣言と同じ行に配置する必要がある式を表します.パラメータはオプションです.適切な式でlambdaを呼び出して、他の関数のように使用できる関数オブジェクトを主張します.これらは、他の関数に渡され、追加の参照で別名化され、コンテナオブジェクトとして呼び出され、呼び出し可能なオブジェクトとして呼び出されます.
>>> def add(x,y):return x + y
... 
>>> add(1,2)
3
>>> addl = lambda x, y: x + y
>>> addl(1,2)
3

>>> add2 = lambda x, y=2: x + y
>>> add2(3)
5
>>> add2(3,4)
7

2内部建設apply,filter,map,reduce
apply()
apply(func[,nkw][,kw])

オプションのパラメータでfuncを呼び出し、nkwは非キーワードパラメータ、kwはキーワードパラメータです.戻り値は、関数呼び出しの戻り値です.apply()関数は後で破棄されます.
filter()
filter(func,seq)

ブール型の関数funcを呼び出してseq内の各要素を巡回します.funcの戻り値をtrueにする要素のシーケンスを返します.
>>> from random import randint
>>> odd = lambda n : n % 2
>>> nums = [ randint(1,100) for i in range(10) ]
>>> nums
[61, 33, 8, 88, 26, 74, 33, 48, 21, 19]

>>> filter(odd,nums)
[61, 33, 33, 21, 19]

map()
map(func,seq1[,seq2...])

関数funcは、所与のシーケンスの各要素に作用し、リストで戻り値を指定します.
>>> map((lambda x: x+2),[0,1,2,3,4,5])
[2, 3, 4, 5, 6, 7]
>>> map((lambda x: x**2),[0,1,2,3,4,5])
[0, 1, 4, 9, 16, 25]

reduce()
reduce(func,seq[,init])

二元関数はseqシーケンスの要素に作用し、毎回1対(前の結果と次のシーケンス要素)を運ぶ.得られた後の結果には、既存の結果と次の値が連続的に作用する.初期値Initが与えられている場合、最初の比較はInitと最初のシーケンス要素です.reduce( (lambda x, y: x + y),range(5))( ( ( (0 + 1) + 1 ) + 2 ) +3 ) +4に等しい
その原理は以下の通りである.
def reduce(func,seq,init=None):
    lseq = list(seq)
    if init is None:
        res = lseq.pop(0)
    else :
        res = init
    for item in lseq:
        res = func(res,item)
    return res