ホームページ バックエンド開発 Python チュートリアル Python の Iterable と Iterator の説明

Python の Iterable と Iterator の説明

Jan 01, 2025 am 07:42 AM

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 0x063DCE38>
ログイン後にコピー
ログイン後にコピー
  • イテレータは、基礎となるシーケンシャル データセット への シーケンシャル
  • (ランダムではありません!) アクセスを提供する暗黙的なシーケンス オブジェクトであることに注意してください。
  • たとえば、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 0x063DCE38>
ログイン後にコピー
ログイン後にコピー

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

Pythonでファイルをダウンロードする方法 Pythonでファイルをダウンロードする方法 Mar 01, 2025 am 10:03 AM

Pythonでファイルをダウンロードする方法

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonを使用してPDFドキュメントの操作方法 Pythonを使用してPDFドキュメントの操作方法 Mar 02, 2025 am 09:54 AM

Pythonを使用してPDFドキュメントの操作方法

フラスコへのイントロ:連絡先ページの追加 フラスコへのイントロ:連絡先ページの追加 Feb 28, 2025 am 10:03 AM

フラスコへのイントロ:連絡先ページの追加

DjangoアプリケーションでRedisを使用してキャッシュする方法 DjangoアプリケーションでRedisを使用してキャッシュする方法 Mar 02, 2025 am 10:10 AM

DjangoアプリケーションでRedisを使用してキャッシュする方法

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

See all articles