寫給Python程式設計高手2:迭代器
python教學專欄介紹程式設計用到的迭代器。
相關免費學習推薦:python教學(影片)
如何實作可迭代物件和迭代器物件
迭代器模式是一種經典的軟體設計模式,現在許多程式語言都內建了這種設計模式。在Python的原始資料類型中,可以進行for迴圈的都屬於可迭代的類型。當然,也可以使用iter函數取得到對應的迭代器,然後遍歷該物件。如下面的程式碼:
l = [1, 3] # 可迭代对象 __iter__t = iter(l) #获取迭代器对象print(t.__next__()) print(t.__next__())# print(t.__next__()) # 报异常复制代码
要實作一個可迭代對象,一般先要實作對應的迭代器對象。在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)复制代码
實作可迭代的對象,也只要實作__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)复制代码
這樣就可以使用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__方法,它都會執行一段gen函數,遇到yield關鍵字為止,並傳回其後的東西。因此,生成器可以理解為一種能夠被打斷的函數。
注意:生成器物件也是可迭代的物件。
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方法,將對應元素組成一個元組。
from itertools import chainfor x in chain([1, 2, 3, 4], ('a', 'b', 'c','d')): print(x)复制代码
以上是寫給Python程式設計高手2:迭代器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C#中如何使用迭代器和遞歸演算法處理數據,需要具體程式碼範例在C#中,迭代器和遞歸演算法是兩種常用的數據處理方法。迭代器可以幫助我們遍歷集合中的元素,而遞歸演算法則能夠有效地處理複雜的問題。本文將詳細介紹如何使用迭代器和遞歸演算法來處理數據,並提供具體的程式碼範例。使用迭代器處理資料在C#中,我們可以使用迭代器來遍歷集合中的元素,而無需事先知道集合的大小。透過迭代器,我

如何使用Python在Linux中進行腳本編寫和執行在Linux作業系統中,我們可以使用Python編寫並執行各種腳本。 Python是一種簡潔而強大的程式語言,它提供了豐富的函式庫和工具,使得腳本編寫變得更加簡單和有效率。以下我們將介紹在Linux中如何使用Python進行腳本編寫和執行的基本步驟,同時提供一些具體的程式碼範例來幫助你更好地理解和運用。安裝Pytho

Python中sqrt()函數用法及程式碼範例一、sqrt()函數的功能及介紹在Python程式設計中,sqrt()函數是math模組中的一個函數,其功能是計算一個數的平方根。平方根是指一個數與自己相乘等於這個數的平方,即x*x=n,則x就是n的平方根。程式中可以使用sqrt()函數來實現對平方根的計算。二、sqrt()函數的使用方法在Python中,sq

Python程式解析百度地圖API文件中的座標轉換功能導讀:隨著網路的快速發展,地圖定位功能已成為現代人生活中不可或缺的一部分。而百度地圖作為國內最受歡迎的地圖服務之一,提供了一系列的API供開發者使用。本文將透過Python編程,解析百度地圖API文件中的座標轉換功能,並給出對應的程式碼範例。一、引言在開發中,我們有時會涉及到座標的轉換問題。百度地圖AP

教你使用Python程式實現百度影像辨識介面的對接,實現影像辨識功能在電腦視覺的領域中,影像辨識技術是非常重要的一項技術。而百度提供了一套強大的圖像識別接口,透過該接口,我們可以方便地實現圖像的分類、標籤、人臉識別等功能。本篇文章將教你使用Python程式語言,透過對接百度影像辨識接口,實現影像辨識的功能。首先,我們需要在百度開發者平台上創建一個應用,並獲

如何用Python寫PCA主成分分析演算法? PCA(PrincipalComponentAnalysis)是一種常用的無監督學習演算法,用於降低資料維度,從而更好地理解和分析資料。在這篇文章中,我們將學習如何使用Python編寫PCA主成分分析演算法,並提供具體的程式碼範例。 PCA的步驟如下:標準化資料:將資料每個特徵的平均值歸零,並調整變異數到相同的範圍,以確保

如何在Python中進行影像處理和識別摘要:現代技術使得影像處理和識別在許多領域中成為了一個重要的工具。 Python作為一種易於學習和使用的程式語言,具有豐富的圖像處理和識別庫。本文將介紹如何使用Python進行影像處理和識別,並提供具體的程式碼範例。影像處理:影像處理是對影像進行各種操作和變換以改善影像品質、擷取影像中的資訊等。 Python中的PIL函式庫(Pi

如何透過Python編寫程式取得百度地圖API中的地圖瓦片?地圖瓦片是構成地圖的基本元素,透過將地圖劃分為小塊獨立的圖像,可以實現更快速的地圖載入和顯示。百度地圖API提供了豐富的地圖瓦片數據,本文將介紹如何使用Python獲取百度地圖API中的地圖瓦片,並給出程式碼範例。取得百度地圖API的地圖瓦片需要使用到該介面提供的金鑰(ak),因此,首先需要在百度地圖
