目次
反復可能なオブジェクトと反復を実装する方法イテレータ オブジェクト
ジェネレーターの概要
ジェネレーター関数を使用して反復可能オブジェクトを実装する方法
逆反復の実行方法と逆反復の実装方法
反復子でスライス操作を実行する方法
for ステートメントで複数の反復可能なオブジェクトを反復する方法
ホームページ バックエンド開発 Python チュートリアル Python プログラミング マスター向けに書かれた 2: イテレータ

Python プログラミング マスター向けに書かれた 2: イテレータ

Nov 04, 2020 pm 05:19 PM
Pythonプログラミング イテレーター

Python チュートリアル 列では、プログラミングで使用されるイテレータを紹介します。

Python プログラミング マスター向けに書かれた 2: イテレータ

関連する無料学習の推奨事項: Python チュートリアル (ビデオ)

反復可能なオブジェクトと反復を実装する方法イテレータ オブジェクト

イテレータ パターンは古典的なソフトウェア設計パターンであり、現在では多くのプログラミング言語にこの設計パターンが組み込まれています。 Python のプリミティブ データ型のうち、for ループで使用できるものは反復可能型です。もちろん、 iter 関数を使用して対応するイテレータを取得し、オブジェクトを走査することもできます。たとえば、次のコード:

l = [1, 3]  # 可迭代对象 __iter__t = iter(l) #获取迭代器对象print(t.__next__())
print(t.__next__())# print(t.__next__()) # 报异常复制代码
ログイン後にコピー

反復可能オブジェクトを実装するには、まず対応する反復子オブジェクトを実装する必要があります。 Python でイテレータを実装するには、__next__ メソッドを実装するだけです。ただし、コレクションパッケージの Iterator クラスでは、__next__ メソッドが抽象メソッドとして定義されているため、プログラムの可読性を考慮して、イテレータ実装時に Iterator クラスを継承した方がよいのではないかと筆者は考えています。

from random import samplefrom collections import Iterable, Iteratorclass WeatherIterator(Iterator):
    def __init__(self, cities):
        self.cities = cities
        self.index = 0

    def getWeather(self, city):
        return (city, sample(['sun','wind','yu'], 1)[0])    def __next__(self):
        if self.index == len(self.cities):            raise StopIteration
        city = self.cities[self.index]
        self.index += 1
        return self.getWeather(city)复制代码
ログイン後にコピー

反復可能オブジェクトを実装するには、__iter__ メソッドを実装するだけで済みます。同様に、コレクション パッケージの Iterable クラスも __iter__ メソッドを抽象クラスとして定義します。

from collections import Iterableclass WeatherIterable(Iterable):
    def __init__(self, cities):
        self.cities = cities
        self.index = 0

    def __iter__(self):
        return WeatherIterator(self.cities)复制代码
ログイン後にコピー

このようにして、for ループを使用して反復できます。

for weather in WeatherIterable(['北京', '上海', '广州']):
    print(weather)复制代码
ログイン後にコピー

ジェネレーターの概要

まず次のコードを見てください:

def gen():
    print("step 1")    yield 1
    print("step 2")    yield 2
    print("step 3")    yield 3复制代码
ログイン後にコピー

上記の gen 関数の戻り値はジェネレーター オブジェクトです。

g = gen()
g.__next__()
print(g.__next__())
print(g.__next__())复制代码
ログイン後にコピー

上記のコードに示すように、ジェネレーターの __next__ メソッドが呼び出されるたびに、yield キーワードが見つかるまで gen 関数が実行され、その後に続く内容が返されます。したがって、ジェネレーターは中断可能な機能として理解できます。

注: ジェネレーター オブジェクトは反復可能なオブジェクトでもあります。

for x in g:
    print(x)复制代码
ログイン後にコピー

ジェネレーター関数を使用して反復可能オブジェクトを実装する方法

__iter__ メソッドをジェネレーター関数として実装することで、反復可能オブジェクトを実装できます。

class PrimeNumbers:
    def __init__(self, start, end):
        self.start = start
        self.end = end    def isPrimeNum(self, k):  #判断是否是素数
        if k < 2:            return False
        for i in range(2, k):            if k % i == 0:                return False
        return True

    def __iter__(self):
        for k in range(self.start, self.end + 1):            if self.isPrimeNum(k):                yield kfor num in PrimeNumbers(2, 100):
    print(num)复制代码
ログイン後にコピー

逆反復の実行方法と逆反復の実装方法

iter 関数は反復可能オブジェクトの前方反復子を取得でき、reversed 関数は反復可能オブジェクトの逆反復子を取得できます。 .イテレータ。

l = [1, 2, 3, 4, 5]for x in reversed(l):
    print(x)复制代码
ログイン後にコピー

逆反復を実装するには、__reversed__ メソッドを実装するだけです。

class FloatRange:
    def __init__(self, start, end, step=0.1):
        self.start = start
        self.end = end
        self.step = step    def __iter__(self):
        t = self.start        while t <= self.end:            yield t
            t += self.step    def __reversed__(self):
        t = self.end        while t >= self.start:            yield t
            t -= self.stepfor x in FloatRange(1.0, 4.0, 0.5):
    print(x)for x in reversed(FloatRange(1.0, 4.0, 0.5)):
    print(x)复制代码
ログイン後にコピー

反復子でスライス操作を実行する方法

itertools パッケージの関数 islice は、反復可能オブジェクトでスライス操作を実行できます。

from itertools import islicefor x in islice(FloatRange(1.0, 4.0, 0.5), 2, 5):
    print(x)复制代码
ログイン後にコピー

for ステートメントで複数の反復可能なオブジェクトを反復する方法

zip メソッドを使用して、対応する要素のタプルを形成します。

for w, e, m in zip([1, 2, 3, 4], ('a', 'b', 'c','d'), [5, 6, 7, 8]):
    print(w, e, m)复制代码
ログイン後にコピー

itertools パッケージのchain 関数を使用して、複数の反復可能なオブジェクトを連結します。 zip メソッドを使用して、対応する要素のタプルを形成します。

rree

以上がPython プログラミング マスター向けに書かれた 2: イテレータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

イテレータと再帰アルゴリズムを使用して C# でデータを処理する方法 イテレータと再帰アルゴリズムを使用して C# でデータを処理する方法 Oct 08, 2023 pm 07:21 PM

C# で反復子と再帰的アルゴリズムを使用してデータを処理する方法には、特定のコード例が必要です。C# では、反復子と再帰的アルゴリズムは、一般的に使用される 2 つのデータ処理方法です。イテレータはコレクション内の要素を走査するのに役立ち、再帰アルゴリズムは複雑な問題を効率的に処理できます。この記事では、反復子と再帰アルゴリズムを使用してデータを処理する方法を詳しく説明し、具体的なコード例を示します。イテレータを使用したデータの処理 C# では、コレクションのサイズを事前に知らなくても、イテレータを使用してコレクション内の要素を反復処理できます。イテレータを通じて、私は

Linux でのスクリプト作成と実行に Python を使用する方法 Linux でのスクリプト作成と実行に Python を使用する方法 Oct 05, 2023 am 11:45 AM

Python を使用して Linux でスクリプトを作成および実行する方法 Linux オペレーティング システムでは、Python を使用してさまざまなスクリプトを作成および実行できます。 Python は、スクリプト作成をより簡単かつ効率的にするための豊富なライブラリとツールを提供する、簡潔で強力なプログラミング言語です。以下では、Linux で Python を使用してスクリプトを作成および実行する基本的な手順を紹介し、Python をよりよく理解して使用するのに役立つ具体的なコード例をいくつか示します。 Pythonをインストールする

Python での sqrt() 関数の使用法 Python での sqrt() 関数の使用法 Feb 21, 2024 pm 03:09 PM

Python での sqrt() 関数の使用法とコード例 1. sqrt() 関数の関数と紹介 Python プログラミングにおいて、sqrt() 関数は math モジュール内の関数であり、その機能は次の平方根を計算することです。数。平方根は、数値をそれ自体で乗算すると数値の 2 乗に等しいことを意味します。つまり、x*x=n の場合、x は n の平方根になります。プログラム内で sqrt() 関数を使用すると、平方根を計算できます。 2. Python で sqrt() 関数を使用する方法、sq

Python で PCA 主成分分析アルゴリズムを記述するにはどうすればよいですか? Python で PCA 主成分分析アルゴリズムを記述するにはどうすればよいですか? Sep 20, 2023 am 10:34 AM

Python で PCA 主成分分析アルゴリズムを記述するにはどうすればよいですか? PCA (主成分分析) は、データの次元を削減してデータをよりよく理解して分析するために使用される、一般的に使用される教師なし学習アルゴリズムです。この記事では、Python を使用して PCA 主成分分析アルゴリズムを作成する方法を学び、具体的なコード例を示します。 PCA の手順は次のとおりです。 データを標準化します。データの各特徴の平均をゼロにし、分散を同じ範囲に調整して、

Baidu Map API ドキュメントの座標変換関数を分析するための Python プログラミング Baidu Map API ドキュメントの座標変換関数を分析するための Python プログラミング Aug 01, 2023 am 08:57 AM

Baidu Map API ドキュメントの座標変換関数を分析するための Python プログラミング はじめに: インターネットの急速な発展に伴い、地図測位機能は現代人の生活に不可欠な部分になりました。中国で最も人気のある地図サービスの 1 つである Baidu Maps は、開発者が使用できる一連の API を提供しています。この記事では、Python プログラミングを使用して、Baidu Map API ドキュメントの座標変換関数を分析し、対応するコード例を示します。 1. はじめに 開発では、座標変換の問題が発生することがあります。百度地図AP

Pythonで画像処理と認識を行う方法 Pythonで画像処理と認識を行う方法 Oct 20, 2023 pm 12:10 PM

Python で画像処理と認識を行う方法 概要: 最新のテクノロジーにより、画像処理と認識が多くの分野で重要なツールになりました。 Python は、豊富な画像処理および認識ライブラリを備えた、習得と使用が簡単なプログラミング言語です。この記事では、Python を使用して画像処理と認識を行う方法と、具体的なコード例を紹介します。画像処理: 画像処理は、画質を向上させたり、画像から情報を抽出したりするために、画像にさまざまな操作や変換を実行するプロセスです。 Python の PIL ライブラリ (Pi

Python プログラミングを使用して、Baidu 画像認識インターフェイスのドッキングを実現し、画像認識機能を実現する方法を説明します。 Python プログラミングを使用して、Baidu 画像認識インターフェイスのドッキングを実現し、画像認識機能を実現する方法を説明します。 Aug 25, 2023 pm 03:10 PM

Python プログラミングを使用して、Baidu の画像認識インターフェイスのドッキングを実装し、画像認識機能を実現する方法を説明します。コンピューター ビジョンの分野において、画像認識技術は非常に重要な技術です。 Baidu は、画像の分類、ラベル付け、顔認識、その他の機能を簡単に実装できる強力な画像認識インターフェイスを提供します。この記事では、Python プログラミング言語を使用して、Baidu 画像認識インターフェイスに接続して画像認識機能を実現する方法を説明します。まず、Baidu Developer Platform でアプリケーションを作成し、

PyPy を使用して Python プログラムのパフォーマンスを向上させる方法 PyPy を使用して Python プログラムのパフォーマンスを向上させる方法 Aug 02, 2023 am 10:39 AM

PyPy を使用して Python プログラムのパフォーマンスを向上させる方法 はじめに: Python は高級プログラミング言語として、シンプルで読みやすく、学習しやすいため、広く使用されています。ただし、Python には解釈された実行特性が原因で実行速度が遅いという問題もあります。この問題を解決するために、PyPy が登場しました。この記事では、PyPy を使用して Python プログラムのパフォーマンスを向上させる方法を紹介します。 1.PyPyとは何ですか? PyPy は、ジャストインタイムでコンパイルされた Python インタープリターです。

See all articles