ホームページ >バックエンド開発 >Python チュートリアル >Lao Qi から Python を学ぶ: 大きなトピックと小さな機能 (1)

Lao Qi から Python を学ぶ: 大きなトピックと小さな機能 (1)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-16 08:41:131060ブラウズ

最初に、プログラミング パラダイムという大きなトピックについて触れます。プログラミングパラダイムとは何ですか? Wikipedia からの説明を引用:

コードをコピー コードは次のとおりです:

プログラミングパラダイムまたはプログラミングパラダイム(英語: Programming paradigm )とは、(ファンはモデル、パラダイムはパターン、メソッドを意味する)典型的なプログラミングスタイルであり、ソフトウェアエンジニアリングに従事する典型的なスタイルを指します(メソッドスタディと比較できます)。たとえば、関数型プログラミング、手続き型プログラミング、オブジェクト指向プログラミング、命令型プログラミングなどは、異なるプログラミング パラダイムです。

プログラミング パラダイムは、プログラムの実行に関するプログラマーの見解を提供 (および決定) します。たとえば、オブジェクト指向プログラミングでは、プログラマはプログラムを一連の相互作用するオブジェクトとみなしますが、関数型プログラミングでは、プログラムはステートレスな関数計算のシーケンスと見なされます。

ソフトウェアエンジニアリングの異なるグループが異なる「方法論」を推進するのと同じように、異なるプログラミング言語も異なる「プログラミングパラダイム」を推進します。特定のパラダイム向けに設計された言語もあれば (Smalltalk や Java はオブジェクト指向プログラミングをサポートし、Haskell や Scheme は関数型プログラミングをサポートするなど)、複数のパラダイムをサポートする言語もあります (Ruby、Common Lisp、Python、Oz など)。

プログラミング言語は複数のパラダイムをサポートできるため、プログラミング パラダイムとプログラミング言語の関係は複雑になる場合があります。たとえば、C++ 設計は、手続き型プログラミング、オブジェクト指向プログラミング、および汎用プログラミングをサポートしています。ただし、設計者とプログラマーは、これらのパラダイム要素を使用してプログラムを構築する方法を検討する必要があります。ある人は C++ で完全な手続き型プログラムを作成でき、別の人は C++ で純粋なオブジェクト指向プログラムを作成でき、さらに 2 つのパラダイムを混合したプログラムを作成する人もいます。

読者が初心者であっても、経験豊富な読者であっても、上記の段落を注意深く読むことをお勧めします。理解できるかどうかにかかわらず、必ず何かを感じるでしょう。

これは推奨記事です。この記事はインターネットからのものです: 「主要なプログラミング パラダイム」

プログラミングのパラダイムについてたくさん話しましたが、今日は何について話しますか?今日は Python の小さな関数をいくつか紹介したいと思います。これらの関数はすべて関数型プログラミングから借用したものです。

フィルター、マップ、リデュース、ラムダ、収量

それらを使用すると、プログラムがより簡単になることが最大の利点です。それらがなければ、プログラムは他の方法でも実装できますが、より面倒です。なので、まだ使えるなら使ってください。

ラムダ

ラムダ関数はたった 1 行で問題を解決できる関数です。とても魅力的に思えます。以下の例を見てください:

コードをコピー コードは次のとおりです:

>>> def add(x): #入力変数を 3 増加させ、増加した値を返す関数を定義します
... x +=3
... return x
...
>>> 数値 = range(10)
>>> 数字
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #このようなリストがあるので、それぞれの数値を3ずつ増やして新しいリストに出力したいと思います

>>> new_numbers = []
>>> 数字で表すと:
... new_numbers.append(add(i)) #add() 関数を呼び出してリストに追加します
...
>>> 新しい番号
[3、4、5、6、7、8、9、10、11、12]

この例では、add() は単なる中間操作です。もちろん、上記の例は他の方法でも実装できます。例:

コードをコピー コードは次のとおりです:

>>> new_numbers = [数字の i には i+3 ]
>>> 新しい番号
[3、4、5、6、7、8、9、10、11、12]

まず第一に、このリスト解析方法は非常に優れています。

ただし、読者が私と同じように偏執的な場合は、add(x) の代わりにラムダ関数を使用する必要があります。

コードをコピー コードは次のとおりです:

>>> ラム = ラムダ x:x+3
>>> n2 = []
>>> 数字で表すと:
... n2.append(lam(i))
...
>>>n2
[3、4、5、6、7、8、9、10、11、12]

ここでの lam は add(x) と同等です。公式の対応を参照してください。lambda x:x+3 のこの行は、add(x) の 3 行 (または 2 行?) を完成させます。特に、最終的な戻り値が完成します。 。次のような例を書くこともできます:

コードをコピー コードは次のとおりです:

>>> g = ラムダ x,y:x+y #x+y を実行し、結果を返します
>>>g(3,4)
7
>>> (lambda x:x**2)(4) #4 の 2 乗を返します
16

上記の例を通して、ラムダ関数の使用方法をまとめてみましょう:
• ラムダの後に変数
を直接続けます。 •変数の後にはコロン
が続きます •コロンの後には式があり、式の計算結果がこの関数の戻り値になります

簡潔かつ要点を伝えるためには、次の式で表現する必要があります。

コードをコピー コードは次のとおりです:

lambda arg1, arg2, ...argN : 引数を使用した式

読者への特別な注意事項: ラムダ関数は任意の数のパラメーター (オプションのパラメーターを含む) を受け取り、単一の式の値を返すことができますが、ラムダ関数にコマンドを含めることはできず、複数の式を含めることもできません。ラムダ関数にあまり多くを詰め込まないでください。より複雑な関数が必要な場合は、通常の関数を定義して、必要なだけ長くしてください。

ラムダに関する限り、ラムダはプログラムのパフォーマンスを向上させるのではなく、コードを単純化します。たとえば、特定の数値の 1 乗、2 乗、3 乗、4 乗を含むリストを印刷するとします。これはラムダで行うことができます:

コードをコピー コードは次のとおりです:

>>> ラム = [ ラムダ x:x,ラムダ x:x**2,ラムダ x:x**3,ラムダ x:x**4 ]
>>> 子羊の場合:
... print i(3),
...
3 9 27 81

ラムダは単一行関数として、プログラミングの実践でオプションで使用できます。私の経験では、単一行関数の定義を減らすために存在する可能性があるため、使用は控えめにしてください。

地図

まず例を見てみましょう。これは、上でラムダについて説明したときの最初の例です。
を使用して実現することもできます。

コードをコピー コードは次のとおりです:

>>> 数字
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #リスト内の各項目に 3 を追加します

>>>>map(add,numbers) #add(x) は上記の関数ですが、ここでは関数名のみを引用できます
[3、4、5、6、7、8、9、10、11、12]

>>>map(lambda x: x+3,numbers) #もちろん lambda も使えます
[3、4、5、6、7、8、9、10、11、12]

map() は Python の組み込み関数です。その基本スタイルは、map(func, seq) であり、seq はシーケンス オブジェクトです。実行時にはシーケンスオブジェクトの各要素を左から右に順番に取り出してfunc関数に詰め込み、funcの戻り値を順番にリストに格納します。

アプリケーションでは、マップで実現できることは他の方法でも実現できます。例:

コードをコピー コードは次のとおりです:

>>> アイテム = [1,2,3,4,5]
>>> 二乗 = []
>>> 項目内の i:
... squared.append(i**2)
...
>>> 二乗
[1、4、9、16、25]

>>> def sqr(x): x**2 を返します
...
>>> マップ(平方根,アイテム)
[1、4、9、16、25]

>>> マップ(ラムダ x: x**2,items)
[1、4、9、16、25]

>>> [ x**2 for x in items ] #これは私のお気に入りです。一般的に十分に高速で読みやすいです
[1、4、9、16、25]

すべての道はローマに通ず プログラミングでは、必要に応じて上記の方法を選択できます。

上記の知覚的な理解に基づいて、map() の公式の説明を参照して、より深く理解しましょう。

コードをコピー コードは次のとおりです:

map(関数、反復可能、...)

追加の反復可能引数が渡される場合、関数はその数の引数を受け取り、1 つの反復可能が別の反復可能より短い場合、すべての反復可能の項目に並列で適用されます。 function が None の場合、identity 関数が想定され、複数の引数がある場合、map() はすべてのイテラブルからの対応する項目を含むタプルからなるリストを返します (一種の転置操作)。反復可能な引数はシーケンスまたは反復可能なオブジェクトにすることができます。結果は常にリストになります。

理解すべき重要なポイント:
•反復可能な要素ごとに、関数メソッド (関数) を順番に適用します (これは本質的に for ループです)。
•すべての結果をリストに返します。
・パラメータが多い場合はパラメータごとに関数を並列実行してください。

例:

コードをコピー コードは次のとおりです:

>>> lst1 = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,0]
>>> map(lambda x,y: x+y, lst1,lst2) #2 つのリストの対応する項目を追加し、結果リストを返します
[7、9、11、13、5]

上記の例を for ループを使用して記述する場合は、それを拡張して次の例を for を使用して書き直すと、難しくないことに注意してください。

コードをコピー コードは次のとおりです:

>>> lst1 = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,0]
>>> lst3 = [7,8,9,2,1]
>>> マップ(ラムダ x,y,z: x+y+z, lst1,lst2,lst3)
[14、17、20、15、6]

これは地図のシンプルさと優雅さを示しています。

プレビュー: 次の講義では、reduce と filter について詳しく説明します

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