python関数チュートリアル:Python関数の注釈と匿名関数を深く分析する

4146 ワード

この文章は主にPython関数の注釈と匿名関数に関する知識を紹介した.本文は実例コードを通じて皆さんに紹介した非常に詳細で、一定の参考価値があり、必要な友达は関数の注釈と匿名関数を参考にすることができる.
関数パラメータの定義、呼び出し、および関数パラメータの内容については、以下の文章で初歩的な紹介を行い、必要なものがあればアクセスして理解することができます.
Python関数
関数注記
関数を作成するには、関数がどのように使用されているかが明らかになります.関数が複雑で、時間が経つと、作成者が関数の使用を再理解するのに時間がかかる可能性がある場合、他の使用者も同様にこのような困惑に直面します.
したがって、関数を作成した後、関数のパラメータに追加の情報を追加することができます.ここでは関数パラメータに注釈を追加し、プログラマにこの関数を正しく使用する方法を示すことができます.次の例を示します.
def add(x:int, y:int) -> int:
 '''Returns the sum of two numbers
 '''
 return x + y

ここで、Python解釈器は、これらの注釈に意味を追加しません(サードパーティ製のツールやフレームワークが可能です).タイプチェックは行われず、実行時に注釈が追加されないまで差はありません.しかし、必要な人がソースコードを読むと、これらは読者に役立ちます.ドキュメントにも表示されます.
>>> help(add)
Help on function add in module __main__:
 
add(x: int, y: int) -> int
 Returns the sum of two numbers

関数注記は、関数のannotationsプロパティにのみ格納されます.例:
>>> add.__annotations__
{'x': , 'y': , 'return': }

注記の主な用途はドキュメントです.Pythonにはタイプ宣言はありませんが、ソースコードを読むと、この関数にどのようなパラメータを渡すか分かりにくいです.このとき,注釈は読者により多くのヒントを与え,関数を正しく使用させることができる.
匿名関数
定義方法
前述した文章では,defを用いて関数を定義することについて述べた.しかし,関数が一方的に実現できれば,匿名関数(lambda式)を用いてこの機能を実現することが考えられる.
関数機能が非常に簡単で、1つの式の値を計算するだけでlambda式で置き換えることができます.例:
>>> add = lambda x, y: x + y
>>> add
 at 0x0000021496CD98B8>
>>> add(2, 3)
5
>>> add('hello', ' world')
'hello world'

実はlambda式を使用するのは、次の効果と同じです.
>>> def add(x, y):
... return x + y
...
>>> add(2, 3)
5
>>> add('hello', ' world')
'hello world'

Lambda式で主に使用されるシーンは、ソートまたはデータreduceです.
>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
>>> sorted(pairs, key=lambda pair: pair[1])
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

上記の例では、リスト要素をソートし、リスト要素メタグループの2番目の要素でソートします.ここでのメタグループの2番目の要素は文字列であり、文字列の比較については、まず文字列の先頭文字、先頭文字を同時に比較し、2番目の文字を比較します.
ここで、fourはoneと、fはoより前に並べられているので、fourはoneの前に並べられ、threeとtwoの頭文字は同じで、2番目の文字hとwを比較しているので、threeはtwoの前に並べられています.
lambda式は単純な関数を定義できるが,実は制限がある.単一の式しか指定できません.その値は最後に返される値です.すなわち、複数の文、反復、例外処理など、他の言語特性を含めることはできません.
変数値の取得
匿名関数を定義するときに、いくつかの変数の値をキャプチャするにはどうすればいいですか?次に、次のサンプルコードの効果を見てみましょう.
>>> x = 10
>>> a = lambda y: x+y
>>> x = 20
>>> b = lambda y: x+y

ここで、まずa(10)とb(10)の結果を当てますか?結果が20と30だと思ったら、それは間違っています.
>>> a(10) 30 >>> b(10) 30

上記の結果は、lambda式のxが自由変数であり、定義時にバインドするのではなく、実行時に値をバインドするためであり、ここでは関数のデフォルト値パラメータ定義とは異なります.したがって,このlambda式を呼び出すと,xの値は実行時の値である.たとえば
>>> x = 10 >>> a(10) 20 >>> x = 20 >>> b(10) 30

匿名関数が定義されたときに値をキャプチャする場合、パラメータ値をデフォルトパラメータとして定義できます.>>> x=10 >>> a = lambda y, x=x: x+y >>> x=20 >>> b = lambda y, x=x: x+y >>> a(10) 20 >>> b(10) 30もう1つの注意点は、ループまたはリストでlambda式リストを作成する場合、定義されたときに毎回の反復値を記憶することが望ましいことです.以下の書き方は効果が得られません.
>>> func = [lambda x: x+n for n in range(5)] >>> for f in func: ... print(f(0)) ...

ここで最終実行の結果も,最終実行のためであり,nの値は実は反復の最後の値である.
関数を変更して、目的の効果を達成することも、上記のデフォルト値の方法です.
>>> func = [lambda x, n=n: x+n for n in range(5)] >>> for f in func: ... print(f(0)) ...

デフォルト値パラメータの形式を使用すると、定義時にバインドするために必要な値を実現できます.
参考資料
ソース
[1] David M. Beazley;Brian K. Jones.Python Cookbook, 3rd Edtioni.O’Reilly Media.2013.
[2] “4.7.6 Lambda Expressions”.docs.python.org.Retrieved 23 February 2020. ここまで书いて、みんなに1つの资源のとてもそろっているpythonの学习の集まりを推荐して、クリックして入って、ここにベテランのプログラマーが以前の学习の心得を分かち合って、ノートを勉强して、まだ第一線の企业の仕事の経験があって、しかもみんなに1部のpythonのゼロの基础からプロジェクトの実戦の资料を心を込めて整理して、毎日みんなにpythonの最新の技术を说明して
ここでPython関数の注釈と匿名関数についての記事では、Python関数の注釈と匿名関数の内容について説明します.