Jadual Kandungan
如何实现可迭代对象和迭代器对象
生成器简介
如何使用生成器函数实现可迭代对象
如何进行反向迭代以及如何实现反向迭代
如何对迭代器做切片操作
如何在一个for语句中迭代多个可迭代对象
Rumah pembangunan bahagian belakang Tutorial Python 写给Python编程高手2:迭代器

写给Python编程高手2:迭代器

Nov 04, 2020 pm 05:19 PM
pengaturcaraan python Iterator

python教程栏目介绍编程用到的迭代器。

写给Python编程高手2:迭代器

相关免费学习推荐:python教程(视频)

如何实现可迭代对象和迭代器对象

迭代器模式是一种经典的软件设计模式,现在很多编程语言都内置了这种设计模式。在Python的原始数据类型中,可以进行for循环的都属于可迭代的类型。当然,也可以使用iter函数获取到相应的迭代器,然后遍历该对象。如下面的代码:

l = [1, 3]  # 可迭代对象 __iter__t = iter(l) #获取迭代器对象print(t.__next__())
print(t.__next__())# print(t.__next__()) # 报异常复制代码
Salin selepas log masuk

要实现一个可迭代对象,一般先要实现相应的迭代器对象。在Python实现迭代器,其实只需要实现__next__方法即可。但collections包中的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)复制代码
Salin selepas log masuk

实现可迭代的对象,也只要实现__iter__方法即可,同样的,collections包中的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)复制代码
Salin selepas log masuk

这样就可以使用for循环进行迭代了。

for weather in WeatherIterable(['北京', '上海', '广州']):
    print(weather)复制代码
Salin selepas log masuk

生成器简介

先看如下代码:

def gen():
    print("step 1")    yield 1
    print("step 2")    yield 2
    print("step 3")    yield 3复制代码
Salin selepas log masuk

上面的gen函数的返回值就是一个生成器对象。

g = gen()
g.__next__()
print(g.__next__())
print(g.__next__())复制代码
Salin selepas log masuk

如上述代码,每调用一次生成器的__next__方法,它都会执行一段gen函数,遇到yield关键字为止,并返回其后的东西。因此,生成器可以理解为一种能够被打断的函数。

注意:生成器对象也是可迭代的对象。

for x in g:
    print(x)复制代码
Salin selepas log masuk

如何使用生成器函数实现可迭代对象

将__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)复制代码
Salin selepas log masuk

如何进行反向迭代以及如何实现反向迭代

iter函数可以获取到可迭代对象的正向迭代器,reversed函数则可以获取到可迭代对象的反向迭代器。

l = [1, 2, 3, 4, 5]for x in reversed(l):
    print(x)复制代码
Salin selepas log masuk

要实现反向迭代,实现__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)复制代码
Salin selepas log masuk

如何对迭代器做切片操作

itertools包中的islice函数,可以可迭代对象进行切片操作。

from itertools import islicefor x in islice(FloatRange(1.0, 4.0, 0.5), 2, 5):
    print(x)复制代码
Salin selepas log masuk

如何在一个for语句中迭代多个可迭代对象

使用zip方法,将对应元素组成一个元组。

for w, e, m in zip([1, 2, 3, 4], ('a', 'b', 'c','d'), [5, 6, 7, 8]):
    print(w, e, m)复制代码
Salin selepas log masuk

使用itertools包中的chain函数,将多个可迭代对象串联起来。 使用zip方法,将对应元素组成一个元组。

from itertools import chainfor x in chain([1, 2, 3, 4], ('a', 'b', 'c','d')):
    print(x)复制代码
Salin selepas log masuk

Atas ialah kandungan terperinci 写给Python编程高手2:迭代器. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan iterator dan algoritma rekursif untuk memproses data dalam C# Cara menggunakan iterator dan algoritma rekursif untuk memproses data dalam C# Oct 08, 2023 pm 07:21 PM

Cara menggunakan iterator dan algoritma rekursif untuk memproses data dalam C# memerlukan contoh kod khusus Dalam C#, iterator dan algoritma rekursif ialah dua kaedah pemprosesan data yang biasa digunakan. Iterator boleh membantu kami merentasi elemen dalam koleksi, dan algoritma rekursif boleh menangani masalah yang kompleks dengan cekap. Artikel ini memperincikan cara menggunakan iterator dan algoritma rekursif untuk memproses data dan menyediakan contoh kod khusus. Menggunakan Iterator untuk Memproses Data Dalam C#, kita boleh menggunakan iterator untuk mengulang elemen dalam koleksi tanpa mengetahui saiz koleksi terlebih dahulu. Melalui iterator, I

Cara menggunakan Python untuk skrip dan pelaksanaan di Linux Cara menggunakan Python untuk skrip dan pelaksanaan di Linux Oct 05, 2023 am 11:45 AM

Cara menggunakan Python untuk menulis dan melaksanakan skrip dalam Linux Dalam sistem pengendalian Linux, kita boleh menggunakan Python untuk menulis dan melaksanakan pelbagai skrip. Python ialah bahasa pengaturcaraan ringkas dan berkuasa yang menyediakan banyak perpustakaan dan alatan untuk menjadikan skrip lebih mudah dan lebih cekap. Di bawah ini kami akan memperkenalkan langkah asas cara menggunakan Python untuk penulisan dan pelaksanaan skrip dalam Linux, dan menyediakan beberapa contoh kod khusus untuk membantu anda memahami dan menggunakannya dengan lebih baik. Pasang Python

Penggunaan fungsi sqrt() dalam Python Penggunaan fungsi sqrt() dalam Python Feb 21, 2024 pm 03:09 PM

Contoh penggunaan dan kod fungsi sqrt() dalam Python 1. Fungsi dan pengenalan fungsi sqrt() Dalam pengaturcaraan Python, fungsi sqrt() ialah fungsi dalam modul matematik, dan fungsinya adalah untuk mengira punca kuasa dua bagi nombor. Punca kuasa dua bermaksud nombor yang didarab dengan sendirinya sama dengan kuasa dua nombor itu, iaitu, x*x=n, maka x ialah punca kuasa dua bagi n. Fungsi sqrt() boleh digunakan dalam atur cara untuk mengira punca kuasa dua. 2. Cara menggunakan fungsi sqrt() dalam Python, sq

Ajar anda cara menggunakan pengaturcaraan Python untuk merealisasikan dok antara muka pengecaman imej Baidu dan merealisasikan fungsi pengecaman imej. Ajar anda cara menggunakan pengaturcaraan Python untuk merealisasikan dok antara muka pengecaman imej Baidu dan merealisasikan fungsi pengecaman imej. Aug 25, 2023 pm 03:10 PM

Ajar anda menggunakan pengaturcaraan Python untuk melaksanakan dok antara muka pengecaman imej Baidu dan merealisasikan fungsi pengecaman imej Dalam bidang penglihatan komputer, teknologi pengecaman imej adalah teknologi yang sangat penting. Baidu menyediakan antara muka pengecaman imej yang berkuasa yang melaluinya kami boleh melaksanakan pengelasan imej, pelabelan, pengecaman muka dan fungsi lain dengan mudah. Artikel ini akan mengajar anda cara menggunakan bahasa pengaturcaraan Python untuk melaksanakan fungsi pengecaman imej dengan menyambung ke antara muka pengecaman imej Baidu. Pertama, kita perlu membuat aplikasi pada Platform Pembangun Baidu dan mendapatkan

Bagaimana untuk melakukan pemprosesan dan pengecaman imej dalam Python Bagaimana untuk melakukan pemprosesan dan pengecaman imej dalam Python Oct 20, 2023 pm 12:10 PM

Cara melakukan pemprosesan dan pengecaman imej dalam Python Ringkasan: Teknologi moden telah menjadikan pemprosesan dan pengecaman imej sebagai alat penting dalam banyak bidang. Python ialah bahasa pengaturcaraan yang mudah dipelajari dan digunakan dengan pemprosesan imej yang kaya dan perpustakaan pengecaman. Artikel ini akan memperkenalkan cara menggunakan Python untuk pemprosesan dan pengecaman imej, serta memberikan contoh kod khusus. Pemprosesan imej: Pemprosesan imej ialah proses melaksanakan pelbagai operasi dan transformasi pada imej untuk meningkatkan kualiti imej, mengekstrak maklumat daripada imej, dsb. Perpustakaan PIL dalam Python (Pi

Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python? Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python? Sep 20, 2023 am 10:34 AM

Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python? PCA (Analisis Komponen Utama) ialah algoritma pembelajaran tanpa pengawasan yang biasa digunakan untuk mengurangkan dimensi data untuk memahami dan menganalisis data dengan lebih baik. Dalam artikel ini, kita akan belajar cara menulis algoritma analisis komponen utama PCA menggunakan Python dan memberikan contoh kod khusus. Langkah-langkah PCA adalah seperti berikut: Seragamkan data: Sifarkan min setiap ciri data dan laraskan varians kepada julat yang sama untuk memastikan

Bagaimana untuk menulis program dalam Python untuk mendapatkan jubin peta dalam API Peta Baidu? Bagaimana untuk menulis program dalam Python untuk mendapatkan jubin peta dalam API Peta Baidu? Jul 31, 2023 pm 04:21 PM

Bagaimana untuk menulis program dalam Python untuk mendapatkan jubin peta dalam API Peta Baidu? Jubin peta ialah elemen asas yang membentuk peta Dengan membahagikan peta kepada imej bebas yang kecil, anda boleh mencapai pemuatan dan paparan peta yang lebih pantas. API Peta Baidu menyediakan data jubin peta yang kaya Artikel ini akan memperkenalkan cara menggunakan Python untuk mendapatkan jubin peta dalam API Peta Baidu dan memberikan contoh kod. Mendapatkan jubin peta API Peta Baidu memerlukan menggunakan kekunci (ak) yang disediakan oleh antara muka Oleh itu, anda perlu menggunakan Peta Baidu terlebih dahulu

Pengaturcaraan Python untuk menganalisis fungsi penukaran koordinat dalam dokumentasi API Peta Baidu Pengaturcaraan Python untuk menganalisis fungsi penukaran koordinat dalam dokumentasi API Peta Baidu Aug 01, 2023 am 08:57 AM

Pengaturcaraan Python untuk menganalisis fungsi penukaran koordinat dalam dokumentasi API Peta Baidu Pengenalan: Dengan perkembangan pesat Internet, fungsi penentududukan peta telah menjadi bahagian yang amat diperlukan dalam kehidupan orang moden. Sebagai salah satu perkhidmatan peta paling popular di China, Peta Baidu menyediakan satu siri API untuk digunakan oleh pembangun. Artikel ini akan menggunakan pengaturcaraan Python untuk menganalisis fungsi penukaran koordinat dalam dokumentasi API Peta Baidu dan memberikan contoh kod yang sepadan. 1. Pengenalan Dalam pembangunan, kita kadangkala melibatkan isu penukaran koordinat. AP Peta Baidu

See all articles