ホームページ  >  記事  >  バックエンド開発  >  Python のジェネレーターとデコレーターとは何ですか?

Python のジェネレーターとデコレーターとは何ですか?

王林
王林転載
2023-09-10 22:49:021013ブラウズ

Python のジェネレーターとデコレーターとは何ですか?

この記事では、Python のジェネレーターとデコレーターについて説明します。

ジェネレーターは、PEP 255 で導入されて以来、Python の重要な部分となっています。

Python のジェネレーターは、ループの反復動作を制御するために使用できる特別なルーチンです。ジェネレーターは配列を返す関数のようなものです。ジェネレーターには、呼び出して一連の数値を生成できるパラメーターがあります。ただし、配列全体を返す関数とは異なり、ジェネレーターは一度に 1 つずつ値を生成するため、必要なメモリが少なくなります。

キーワード「yield」を持つ Python 関数はどれもジェネレーターと呼ぶことができます。通常の Python 関数は最初の行から実行を開始し、return ステートメントまたは例外を受け取るか関数が終了するまで継続します。ただし、関数のスコープ中に作成されたローカル変数は破棄され、それ以上アクセスすることはできません。ジェネレーターの場合、yield キーワードに遭遇すると、関数の状態はフリーズされ、ジェネレーターが再度呼び出されるまですべての変数はメモリに保存されます。

反復子に基づいたジェネレーターを使用することも、「next」キーワードを使用して明示的に呼び出すこともできます。

通常は Python のジェネレーター -

  • def キーワード定義を使用します

  • yield キーワードを使用する

  • には複数の収益キーワードが含まれる場合があります。

  • イテレータを返します。

Generators は、Iterablegenerator オブジェクトを返す関数です。ジェネレーター オブジェクトの値はリスト全体を一度にフェッチするのではなく、一度に 1 つずつフェッチされるため、for ループ、next()、または list() 関数を使用して実際の値を取得できます。

ジェネレーター関数

ジェネレーターは、ジェネレーター関数とジェネレーター式を使用して作成できます。

ジェネレーター関数は通常の関数に似ていますが、値を返す代わりに、yield キーワードがあります。

ジェネレーター関数を作成するには、yield キーワードを追加します。次の例は、ジェネレーター関数の作成方法を示しています。

イテレータを備えたジェネレータ

###例### リーリー ###出力### リーリー

ジェネレーターからの出力値を読み取ります

list()、for-loop、next() メソッドを使用して、ジェネレーター オブジェクトから値を読み取ることができます。 next() を使用してジェネレーター オブジェクトから値を読み取ります

next() メソッドは、リスト、配列、またはオブジェクト内の次の項目を返します。リストが空で next() が呼び出されると、stopIteration シグナルとともにエラーが返されます。このエラーは、リストにエントリがもうないことを示します。

###例### リーリー ###出力### リーリー

Python のデコレータ

Python には、既存のコードに機能を追加するための

Decorator

という素晴らしいツールが用意されています。

これは、コンパイル時にプログラムの一部がプログラムの別の部分を変更しようとするため、

メタプログラミング

とも呼ばれます。

デコレーターは、関数を別の関数のパラメーターとして使用し、ラッピング関数内でその関数を呼び出します。 ###文法### リーリー ここでのtutorials_decoratorは、別の

呼び出し可能な

関数 python_decorator の上にコードを追加し、ラッパー関数を返す

呼び出し可能な

関数です。

###例###

ここで

func

は装飾された関数、python_decoratorは装飾に使用される関数です リーリー ###出力### リーリー python_decorator(func) - これはデコレーター関数です。別の関数を引数として受け取り、それを「装飾」します。つまり、関数を変更して、変更されたバージョンを返します。 p>

wrapper

- デコレータ関数内に wrapper という別の内部関数を定義します。これは、渡された関数 func をラップすることによって変更される実際の関数です。

ラッパー関数はデコレーターによって返されます。

tutorials_decorator - これは装飾する必要がある通常の関数です。ここでは単純なステートメントを出力するだけです。

構文デコレータ 上記のデコレータ パターンは Python コミュニティで人気がありますが、少し複雑です。関数名を 3 回記述する必要があり、装飾は関数定義の下に隠れています。 したがって、Python は、構文シュガーを含めるために @ シンボル を使用することで、デコレーターを使用する新しい方法を追加しました。

###文法### リーリー

構文シュガーは、コンテンツを読みやすくしたり表現しやすくするためにプログラミング言語で使用される構文です。

###例###

次の例は、前の例と同じ操作を実行します - リーリー ###出力### リーリー 前の例と同じですが、唯一の違いは、

の代わりに

@python_decorator

を使用することです。 リーリー ###結論は###

この記事では、Python のジェネレーターとデコレーターについて簡単に説明しました。また、コードを作成する際にジェネレーターとデコレーターを使用する方法も示しました。

以上がPython のジェネレーターとデコレーターとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。