python関数の二関数式プログラミング
python関数の二関数式プログラミング
1lambda
書式:
pythonではlambdaキーワードで匿名関数を作成できます.匿名は標準的な方法で宣言する必要がないからです.完全なlambda文は、宣言と同じ行に配置する必要がある式を表します.パラメータはオプションです.適切な式でlambdaを呼び出して、他の関数のように使用できる関数オブジェクトを主張します.これらは、他の関数に渡され、追加の参照で別名化され、コンテナオブジェクトとして呼び出され、呼び出し可能なオブジェクトとして呼び出されます.
2内部建設apply,filter,map,reduce
apply()
オプションのパラメータでfuncを呼び出し、nkwは非キーワードパラメータ、kwはキーワードパラメータです.戻り値は、関数呼び出しの戻り値です.apply()関数は後で破棄されます.
filter()
ブール型の関数funcを呼び出してseq内の各要素を巡回します.funcの戻り値をtrueにする要素のシーケンスを返します.
map()
関数funcは、所与のシーケンスの各要素に作用し、リストで戻り値を指定します.
reduce()
二元関数はseqシーケンスの要素に作用し、毎回1対(前の結果と次のシーケンス要素)を運ぶ.得られた後の結果には、既存の結果と次の値が連続的に作用する.初期値Initが与えられている場合、最初の比較はInitと最初のシーケンス要素です.
その原理は以下の通りである.
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