【python学習ノート】Python関数式プログラミング
2825 ワード
説明
関数式プログラミングは一連の関数を使って問題を解決し、一般的なプログラミング思考に従って、問題に直面する時私たちの思考方式は“どのようにします”で、関数式プログラミングの思考方式は私が“何をします”です.Pythonにはlambda,map,reduce,filterなどの内蔵メソッドがあります.
匿名関数(lambda)
構文
lambda args: expression
パラメータ(args)の構文は通常の関数と同様であり、式(expression)の値は匿名関数呼び出しの戻り値である.lambda式はこの匿名関数を返します.
元のメソッド
匿名関数を使用した関数メソッド
map関数
map関数は毎回1つのデータのみを処理します
Mapは1つのメソッドと1つの集合をパラメータとして受け入れる.新しい空のセットを作成し、各セットの要素をパラメータとしてこの入力メソッドを呼び出し、戻り値を新しく作成したセットに挿入します.最後にその新しい集合に戻ります.
Reduce関数
Reduce関数は毎回2つのデータを処理する必要があり,Reduceは1つの方法と1つの集合をパラメータとして受け入れる.この方法でコンテナ内のすべての要素を反復した結果を返します.
最初の反復はこれまで反復結果が伝わってこなかった.reduce()は、セット内の最初の要素を最初の反復として使用します.
関数プログラミングの特徴:
1)コードが簡単になりました.
2)データセット,操作,戻り値が一緒に置かれている.
3)コードを読むときに循環体がなくなると,一時変数が少なくなり,変数が逆さまに論理的になる.
4)あなたのコードは、どのようにするかではなく、何をするかを説明するようになりました.
leason|個人ブログ
関数式プログラミングは一連の関数を使って問題を解決し、一般的なプログラミング思考に従って、問題に直面する時私たちの思考方式は“どのようにします”で、関数式プログラミングの思考方式は私が“何をします”です.Pythonにはlambda,map,reduce,filterなどの内蔵メソッドがあります.
匿名関数(lambda)
構文
lambda args: expression
パラメータ(args)の構文は通常の関数と同様であり、式(expression)の値は匿名関数呼び出しの戻り値である.lambda式はこの匿名関数を返します.
元のメソッド
L1 = [1,-9,6,6,7]
L2 = []
for i in range(len(L1)): # for
if L1[i] > 0:
lst2.append(L2[i])
匿名関数を使用した関数メソッド
L2 = filter(lambda n: n > 0, L1)
map関数
map関数は毎回1つのデータのみを処理します
Mapは1つのメソッドと1つの集合をパラメータとして受け入れる.新しい空のセットを作成し、各セットの要素をパラメータとしてこの入力メソッドを呼び出し、戻り値を新しく作成したセットに挿入します.最後にその新しい集合に戻ります.
def to_lower(item):
return item.lower()
# name = map(lambda n: n.lower(),['LeaSon','Baidu','Qq'])
name = map(to_lower,['LeaSon','Baidu','Qq'])
print name
>>> ['leason', 'baidu', 'qq']
Reduce関数
Reduce関数は毎回2つのデータを処理する必要があり,Reduceは1つの方法と1つの集合をパラメータとして受け入れる.この方法でコンテナ内のすべての要素を反復した結果を返します.
最初の反復はこれまで反復結果が伝わってこなかった.reduce()は、セット内の最初の要素を最初の反復として使用します.
def add(a,b):
return a+b
# result = reduce(lambda a,b:a+b,[1,2,3])
result = reduce(add,[1,2,3])
print result
>>> 6
関数プログラミングの特徴:
1)コードが簡単になりました.
2)データセット,操作,戻り値が一緒に置かれている.
3)コードを読むときに循環体がなくなると,一時変数が少なくなり,変数が逆さまに論理的になる.
4)あなたのコードは、どのようにするかではなく、何をするかを説明するようになりました.
leason|個人ブログ