検索

Explaining Iterable vs Iterator in Python

このページの目的は、2 つの反復プロトコルのダイナミクスを示すことです:

  1. 反復可能
  2. イテレーター

1. ただし、最初に (紛らわしい類似の単語に追加するため)、反復について説明しましょう

  • 反復は、もちろん、ソースから項目を 1 つずつ取得し、それぞれに対して順番に何かを行うことです
  • Python では、これは一般的に次のように使用されます。
    • a) for/while ループと
    • b) 内包表記
  • デフォルトでは、これらの構造は構造全体を反復します
  • ただし、ジェネレーター のように、よりきめの細かい制御が必要になる場合もあります。
  • このために、2 つの重要な概念/プロトコルがあり、その上に Python の大部分が構築されています。
  • a) 反復可能なオブジェクト
  • b) イテレータオブジェクト
  • 両方とも標準の Python プロトコルに反映されます
  • これは特別なことではありません。実際、for/while ループと内包表記は反復プロトコルのこれらの下位レベルの要素に直接構築されます

2. ITER() メソッドは反復可能オブジェクトから反復子を作成します

  • 反復可能なオブジェクト (オブジェクトのコレクションまたはストリーム) は、組み込みの iter() 関数
  • に渡すことができる任意のオブジェクトです。
  • 組み込み iter() 関数が渡されると、渡された型の イテレータ オブジェクト が返されます。つまり、文字列イテレータは次のように作成されます。
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at>
</str_iterator>
  • イテレータは、基礎となるシーケンシャル データセット への シーケンシャル
  • (ランダムではありません!) アクセスを提供する暗黙的なシーケンス オブジェクトであることに注意してください。
  • たとえば、range オブジェクト自体はイテレータではありません
  • 反復子は、基礎となるシリーズの任意の要素へのアクセスを許可しません
  • シリーズの 次の 要素へのアクセスのみを提供します
  • それらは順次アクセスを提供します
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5

3. NEXT() 関数はイテレータから次の値を返します

  • 組み込み next() には iterator オブジェクトが必要です。コレクションの反復で次の値を返します
  • イテレータは 2 つのコンポーネントで構成されます:
  • コレクションの次の要素を取得するメカニズム
  • シリーズの終了を知らせるメカニズム

オブジェクト システムが組み込まれたプログラミング言語では、この抽象化は通常、クラスによって実装できる特定のインターフェイスに対応します

  • next() を使用すると、最初から最後までシリーズ全体ではなく、リクエストに応じて各項目を順番に検討できます
  • 反復子インターフェイスには 2 つのメッセージが含まれています
    • next → 次の要素のクエリ
    • iter → イテレータを返します
  • 制約: イテレータは 1 回反復可能

4. クラスルームの例 - 反復可能から反復子、停止例外まで

  • Python は、StopIteration タイプの 例外 を自由に発生させます。
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at>
</str_iterator>

5. 実際の例 - 複数のコマンドライン入力の単体テスト

  1. リスト ["20.01", "y"] などの反復可能なオブジェクトを定義/取得します
  2. 反復可能なオブジェクトを iter() に渡す → 反復子オブジェクトを作成する
  3. コード内で入力関数が呼び出されるたびに、反復子オブジェクトを next() に渡してリストの次の値を生成します。
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
  • 初めて input() に遭遇すると、「20.01」値が渡されます。
  • 2回目は「y」です
  • 3 回目は例外となります

6. リンク

  • https://mypy.readthedocs.io/en/stable/protocols.html#iteration-protocols
  • 5.2 暗黙的なシーケンス - Python の SICP

以上がPython の Iterable と Iterator の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール