検索
ホームページバックエンド開発Python チュートリアルPython プログラミングにおけるイテレータ プロトコルとトラバーサル メソッド

はじめに

前のパートの導入により、Python の反復可能なオブジェクトとイテレータ (Iterable と Iterator) を理解し、習得することが容易になります。このコンテンツでは、イテレータに関連するコンテンツをさらに紹介します。

Python プログラミングにおけるイテレータ プロトコルとトラバーサル メソッドイテレータ プロトコル

Python では、イテレータ (Iterator) オブジェクトは次の 2 つのメソッドをサポートする必要があります。これらは一緒になってイテレータ プロトコルを形成します。

1) __iter__():

オブジェクトのこのメソッドは、反復子オブジェクト自体を返します。これは、コンテナーとイテレーターを for-in ステートメントで使用するために必要です。また、組み込みの iter() 関数を使用することもできます。この関数は基本的に __iter__() メソッドをバックグラウンドで呼び出します。

2)__next__():

イテレータから次の項目を返します。他に項目がない場合は、StopIteration 例外がスローされます。組み込みの next() 関数を使用して次の項目を読み取ることもできます。これは基本的に __next__() メソッドを呼び出します。

前に述べたように、リスト、タプル、辞書、セットはすべて反復可能な型です。つまり、イテレータを取得できる型です。例を見てください:

Python プログラミングにおけるイテレータ プロトコルとトラバーサル メソッドコード スニペット リスト-01

入力結果は次のとおりです:

A
B
C

サンプル コードでは、タプルの反復を定義します。次に、この反復可能オブジェクトに対して iter() 関数を呼び出します。 iter() 関数は、tupIter という名前の反復子を返します。次に、 next() 関数を複数回呼び出します。 next() 関数が実行されるたびに、イテレータ内の次の項目が自動的に返されます。

次のサンプル コードを見てください:

Python プログラミングにおけるイテレータ プロトコルとトラバーサル メソッド コード スニペット-02

実行出力の結果は次のとおりです:

P
y

上記のコード リストでは、文字列オブジェクトに対して __ iter__() メソッドが呼び出されます。 String オブジェクトは反復子プロトコルを実装しているため、文字列は一連の文字を含む反復可能なオブジェクトです。 __iter__() メソッドを呼び出すと、イテレータが直接返されます。次に、返されたイテレータを介して __next__() メソッドを呼び出し、イテレータ内の要素を 1 つずつ出力します。

簡単に言えば、オブジェクトがイテレータ プロトコルを実装している限り、オブジェクトは上記 2 つのメソッドに従って繰り返し呼び出すことができます。

反復子の走査

前の紹介で見たように、next() 関数 (または __next__() メソッド) を使用して反復子の項目を手動で走査します。 next() 関数がイテレータの最後に到達すると、返すデータがなくなり、StopIteration 例外が発生します。

例を参照してください:

Python プログラミングにおけるイテレータ プロトコルとトラバーサル メソッドコード スニペット リスト-03

上記のプログラムを実行すると、出力は次のようになります。 :

10

##20

#30

##トレースバック (最後の呼び出し):

# #ファイル ……、

print(next(listIter))

反復の停止

上記のコードでは、next() 関数が 4 回呼び出されます。これはイテレータ内の項目の数を超えています。最後の呼び出しでは、反復子の要素が反復されたため、StopIteration 例外がスローされました。さらに、手動反復の完了後に例外が確実にスローされるようにするには、例外処理を自分で実行する必要があります。そうしないと、以降の実行が正常に実行されなくなります。

認識する必要があるのは、ほとんどのシナリオでは、次のメソッドを自分で手動で呼び出す必要がないということです。Python の for ループは、イテレータを返すことができるオブジェクトを自動的に走査できます。言い換えれば、for ループは Python の任意の反復可能なオブジェクトを反復できます。

例を参照してください:

Python プログラミングにおけるイテレータ プロトコルとトラバーサル メソッド

コード リスト スニペット 04

上記のコードでは、for ループを使用してリストを走査します。前に定義しました。 next() 関数を手動で使用していないこと、および StopIteration 例外が発生していないことは明らかです。これが Python の for ループの利点です。これらすべてを舞台裏で処理してくれます。

もちろん、この方法でループの反復を自分で処理することもできます。次に、独自のバージョンの for ループを定義します。 while ループを使用して、for ループの動作を複製します。ここでは、この実装に必要なものすべてを自分たちで構築します。以下に示すように:

Python プログラミングにおけるイテレータ プロトコルとトラバーサル メソッド

コード リスト スニペット-05

上記のリストでは、シミュレートされた for ループの独自のバージョンを実装しました。コードでは無限 while ループが使用されています: while True。 Try-Except ブロックはループ内に設定されます。 try ブロックで、反復子の __next__() メソッドを呼び出して次の要素を取得します。呼び出しが成功すると、要素が出力されます。 StopIteration タイプのエラーが発生した場合、例外は例外ブロックでキャッチされます。例外ブロックで行うことは非常に簡単です。このループから抜け出すだけです。これは、反復子の終わりに到達したことを意味します。

概要

この記事は以上です。主にイテレータ プロトコルとイテレータ トラバーサルについて紹介します。コンテンツのテキストは長くないため、コードと組み合わせることで、これらの Python プログラミングの知識ポイントをより深く理解し、習得することができます。

以上がPython プログラミングにおけるイテレータ プロトコルとトラバーサル メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonリストをどのようにスライスしますか?Pythonリストをどのようにスライスしますか?May 02, 2025 am 12:14 AM

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

Numpyアレイで実行できる一般的な操作は何ですか?Numpyアレイで実行できる一般的な操作は何ですか?May 02, 2025 am 12:09 AM

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Pythonを使用したデータ分析では、配列はどのように使用されていますか?Pythonを使用したデータ分析では、配列はどのように使用されていますか?May 02, 2025 am 12:09 AM

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc

リストのメモリフットプリントは、Pythonの配列のメモリフットプリントとどのように比較されますか?リストのメモリフットプリントは、Pythonの配列のメモリフットプリントとどのように比較されますか?May 02, 2025 am 12:08 AM

listsandnumpyarraysinpythonhavedifferentmemoryfootprints:listsaremoreflexiblellessmemory-efficient、whileenumpyarraysaraysareoptimizedfornumericaldata.1)listsstorereferencesto objects、with whowedaround64byteson64-bitedatigu

実行可能なPythonスクリプトを展開するとき、環境固有の構成をどのように処理しますか?実行可能なPythonスクリプトを展開するとき、環境固有の構成をどのように処理しますか?May 02, 2025 am 12:07 AM

toensurepythonscriptsbehaveCorrectlyAcrossDevelosment、staging、and Production、usetheseStrategies:1)環境variablesforsimplestetings、2)configurationfilesforcomplexsetups、and3)dynamicloadingforadaptability.eachtododododododofersuniquebentandrequiresca

Pythonアレイをどのようにスライスしますか?Pythonアレイをどのようにスライスしますか?May 01, 2025 am 12:18 AM

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

どのような状況で、リストは配列よりもパフォーマンスが向上しますか?どのような状況で、リストは配列よりもパフォーマンスが向上しますか?May 01, 2025 am 12:06 AM

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

PythonアレイをPythonリストに変換するにはどうすればよいですか?PythonアレイをPythonリストに変換するにはどうすればよいですか?May 01, 2025 am 12:05 AM

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン