タイトル画像:plxabayから
関数型プログラミングの特徴は、関数自体をパラメーターとして別の関数に渡すことができ、関数を返すこともできることです。
Pythonの関数型プログラミングでは、主に次の4つの基本関数を使用します。
(1)、map()
(2)、reduce()
(3)、filter()
(4)、sorted()
、無名関数lambda()それらと組み合わせて。
1つ、地図
map()関数の一般的な呼び出しメソッドは次のとおりです。
map(function, interable)
map()関数の2つのパラメーターは必須です。最初のパラメーターは関数名または無名関数であり、2番目のパラメーターはリストやタプルなどの反復可能なオブジェクトです。
map()関数によって実装される関数は、interable内の要素を関数に順番に渡して実行し、結果を返すことです。python2.xでは、結果は新しいリストとして返され、python3.xでは、マップオブジェクトを返します。list()メソッドを使用してマップオブジェクトのコンテンツを取得するか、ループすることができます。
次の例(python3):
>>> map(lambda x: x*2, [1,2,3,4,5])
<map object at 0x0000013D497E92E8>
>>> list(map(lambda x: x*2, [1,2,3,4,5]))
[2, 4, 6, 8, 10]
>>> for i in map(lambda x: x*2, [1,2,3,4,5]):
... print(i)
...
2
4
6
8
10
>>>
もちろん、map()は、次のように、複数の相互作用可能なオブジェクトを渡すことができます。
>>> list(map(lambda x,y: x+y, [1,2,3,4,5], [6,7,8,9,10]))
[7, 9, 11, 13, 15]
>>>
複数の相互作用可能なオブジェクトを渡す場合、最初に関数本体は複数のパラメーターを受け入れます。たとえば、上記の例を渡し、2つの相互作用可能なオブジェクトを渡す場合、関数は2つのパラメーター、つまりx、yを受け入れます。複数の相互作用可能なオブジェクトが渡されると、関数は相互作用可能なオブジェクトから値を順番に取得し、新しいタプルを形成し、最後にタプルを関数に渡します。上記の例のように、初回(1,6)関数は結果7を取得し、2回目(2,7)は結果9を取得します。
2、減らす
python3では、reduce()がグローバル名前空間から削除され、functoolsモジュールに配置されました。これを使用するには、最初にモジュールをインポートする必要があります。reduce()の一般的な呼び出しメソッドは次のとおりです。
from functools import reduce
reduce(function, interable)
最初のパラメーターは関数名または無名関数、2番目のパラメーターは反復可能なオブジェクト、3番目のパラメーターは初期値(オプションのパラメーター)であり、その関数は関数の計算結果を返すことです。次のように:
>>> from functools import reduce
>>> reduce(lambda x,y: x+y, [1,2,3,4,5])
15
>>> reduce(lambda x,y: x*y, [1,2,3,4,5])
120
>>> reduce(lambda x,y: x*y, [1,2,3,4,5],100)
12000
reduce()の動作原理は、相互作用可能なオブジェクトの要素を順番に取得し、最後の結果で計算して、最後に結果を返すことです。デフォルトのパラメーターが渡されない場合、最初のパラメーターは最初の計算の結果になり、値は2番目のパラメーターから渡されます。デフォルトのパラメータがある場合は、最初のパラメータとデフォルト値から直接計算してから続行します。
3、フィルター
filter()関数の呼び出し形式は次のとおりです。
filter(function, iterable)
filter()関数の2つのパラメーター。最初のパラメーターは関数名または無名関数であり、2番目のパラメーターはリストなどの反復可能なオブジェクトです。filer()関数はmap()関数に似ています。これらは相互作用可能なオブジェクトから計算され、順番に関数に渡されます。違いは、filter()関数が各実行の結果のブール値を判断することです。除外するにはbool値のみがTrueです。python2では引き続きリストを返し、python3ではフィルターオブジェクトを返します。list()メソッドとループを使用して内部の値を取得できます。次のように:
>>> list(filter(lambda x: x/2, [1,2,3,4,5]))
[1, 2, 3, 4, 5]
>>> list(filter(lambda x: x%2, [1,2,3,4,5]))
[1, 3, 5]
>>>
四、ソート
sort()関数の呼び出しメソッドは次のとおりです。
sorted(iterable, key=None, reverse=False)
パラメータの説明は次のとおりです
。interableはリスト、タプルなどの反復可能なオブジェクトです。keyは
主に比較に使用される要素であり、単なるパラメータです。特定のパラメータはiterableオブジェクトから取得され、1つを指定します。並べ替える反復可能オブジェクトの要素;
reverse、並べ替えルール、reverse = Trueは降順を意味し、reverse = Falseは昇順を意味し、デフォルトはFalseです。
次の例:
>>> sorted([1,9,8,2,3])
[1, 2, 3, 8, 9]
>>> sorted([1,9,8,2,3], reverse=True)
[9, 8, 3, 2, 1]
>>> sorted(L, key=lambda x:x[1])
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]
>>>
五数要約
関数型プログラミングの利点は次のとおりです。
(1)コードがより簡潔になります。
(2)コードにループ本体がなく、多くの一時変数が欠落し、ロジックが単純になります。
(3)データセット、操作と戻り値はすべてまとめられています