ホームページ  >  記事  >  バックエンド開発  >  Python 関数型プログラミングのサンプル チュートリアル

Python 関数型プログラミングのサンプル チュートリアル

零下一度
零下一度オリジナル
2017-06-30 16:08:431255ブラウズ

関数型プログラミングは一連の関数を使って問題を解決する 一般的なプログラミングの考え方によれば、問題に直面したとき、私たちの考え方は「どうするか」ですが、関数型プログラミングの考え方は「何をしたいか」です。 。関数型プログラミングの特徴については、今はまとめませんが、関数型プログラミングとは何かを理解するために、直接例を使用してみましょう。

ラムダ式 (匿名関数):

通常の関数と匿名関数の定義方法:


#Ordinary function def add(a,b):

   return a + bprint add(2,3) 
#匿名函数add = lambda a,b : a + bprint add(2,3)#========输出===========5
5


匿名関数の命名規則、確認済みlamdba キーワードの場合、コロン (:) の左側は関数が受け取るパラメータ (a, b) を表し、コロン (:) の右側は関数の戻り値 (a+b) を表します。

lamdbaは作成時に名前を付ける必要がないので、匿名関数と呼ばれます^_^

マップ関数:

文字列の長さを計算する


abc = ['com','fnng','cnblogs']for i in range(len(abc)):    print len(abc[i])#========输出===========347

abc文字列配列を定義し、abcを計算する各文字列の長さ。出力配列をループします。

map() 関数がこのプロセスをどのように実装するかを見てみましょう。


abc_len = map(len,['hao','fnng','cnblogs'])print abc_len#========输出===========[3, 4, 7]

出力結果は同じですが、形式が異なります。最初のものは単純な数値であり、map() 関数の出力は配列の形式を維持します。

大文字と小文字の変換;

Python は大文字と小文字を変換する upper() と lower() を提供します。


#大文字変換 ​​ss='hello WORLD!'
print ss.upper() #大文字に変換 print ss. lower() #小文字に変換 #========出力=== = =======ハローワールド! hello world!


map() 関数を使用して変換します:


def to_lower(item):    return item.lower()name = map(to_lower,['cOm','FNng','cnBLoGs'])print name#========输出===========['com', 'fnng', 'cnblogs']

この例では、関数 toUpper を作成したことがわかりますが、この関数は渡された値を変更しません。渡された値に対して簡単な操作を実行して、それを返すだけです。次に、これをmap関数で使用して、やりたいことを明確に記述します。

通常の方法で文字列の大文字と小文字の変換を実装する方法を見てみましょう:


abc = ['cOm','FNng','cnBLoGs']lowname = []for i in range(len(abc)):    lowname.append(abc[i].lower())print lowname#========输出===========['hao', 'fnng', 'cnblogs']

map() 関数とラムダ式 (匿名関数) を使用すると、より強力な関数を実現できます。

#正方形を見つける#0*0,1*1,2*2,3*3,....8*8squares = map(lambda x : x*x ,range(9))print squares#=== =====Output===========[0, 1, 4, 9, 16, 25, 36, 49, 64]

Reduce関数:

def add(a,b):    return a+b

add = reduce(add,[2,3,4])print add#========输出===========9  对于Reduce函数每次是需要对两个数据进行处理的,首选取2 和3 ,通过add函数相加之后得到5,接着拿5和4 ,再由add函数处理,最终得到9 。

先ほどのmap関数の例ではMap 関数は一度に 1 つのデータのみを処理することがわかります。

そして、Reduce 関数とラムダ式を使用して階乗を実装することがいかに簡単であるかを発見しました:

#5Factorial#5! =1*2*3*4*5printreduce(lambda x,y: x*y, range(1,6))#========出力===========120

map とreduce に加えて、Python には補助関数として filter、find、all、any などの関数もあり (他の関数型言語でも利用可能)、これによりコードがより簡潔で読みやすくなります。より複雑な例を見てみましょう:

#配列内の正の整数の値を計算します。number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8] カウント = 0 sum = 0for i in range(len(number)):

if number[i]>0:
        count += 1
        sum += number[i]print sum,countif count>0:
    average = sum/countprint average

#========出力===========30 6 5

関数型プログラミングを使用する場合、この例は次のように書くことができます:

number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]

sum = filter(lambda x: x>0, number)

average = reduce(lambda x,y: x+y, sum)/len(sum)print average

#========Output===========5

最後に、関数型プログラミングには次の利点があります:

1) コードが単純になります。
2) データセット、演算、戻り値がすべてまとめられています。
3) コードを読むと、ループ本体がないため、いくつかの一時変数と前後する変数のロジックを保存できます。
4) コードは、実行方法ではなく、実行したいことを記述するものになります。


以上がPython 関数型プログラミングのサンプル チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。