Python 如何實現可迭代物件和迭代器物件

2022-03-22 02:17:56 字數 2318 閱讀 2306

一)通過可迭代物件和python內建函式iter()得到迭代器:即,iter(可迭代物件)  -->  得到乙個迭代器;

例:list_1 = [1, 2, 3, 4, 5]

1、iter(物件),若此物件想滿足迭代要求,其內部要有迭代介面或者乙個序列:__iter__()或者__getitm__()

2、迭代器只有乙個介面:next(),呼叫next()時會自動獲得生產此迭代器的物件的乙個值;

t = iter(list_1)

t.next()

#輸出1

二)案例:

問題:如果一次抓取所有城市天氣再顯示,顯示第乙個城市氣溫時,有很高的延時,並且浪費儲存空間;期望從『用時訪問』的策略,並且能把所有城市氣溫裝到乙個物件裡,可用for語句進行迭代。如何實現?

方案:實現乙個迭代器物件weatheriterator,next方法每次返回乙個城市氣溫;

實現乙個可迭代物件weatheriteratble,__iter__方法返回乙個迭代器物件;

#

coding:utf8

import

requests

from collections import

iterable, iterator

#氣溫迭代器,

class

weatheriterator(iterator):

#傳入城市名字的字串列表

def__init__

(self, cities):

self.cities =cities

#記錄乙個index,刻畫迭代的位置,初始化為0

self.index =0

#city是城市名字的字串

defgetweather(self, city):

#用requests庫,對一固定**進行get請求,得到乙個json形式資料;

r = requests.get(u'

' +city)

#對json資料解析,得到資料:data

data = r.json()['

data

']['

forecast

'][0]

#返回目標資料:data['low'], data['high']

return

'%s: %s, %s

' % (city, data['

low'], data['

high'])

#迭代器物件實現的方法:next;功能:每次返回乙個城市的資訊,最終迭代完後丟擲乙個異常

def__next__(self):

#用if語句刻畫最終迭代完後的狀況;self.index,刻畫迭代的位置

if self.index ==len(self.cities):

raise

stopiteration

#正常迭代情況,即每次迭代出乙個城市的氣溫資訊;self.cities[self.index],得到需要的城市名字

city =self.cities[self.index]

#每迭代一次,要對index + 1

self.index += 1

#將目標城市名字傳入geweather方法,得到目標城市的氣溫資訊;

return

self.getweather(city)

#實現可迭代物件,繼承iterable,則對weatheriterable例項化時,需要傳入乙個可迭代的物件;

class

weatheriterable(iterable):

def__init__

(self, cities):

#先維護cities,為了後面傳給構造器weatheriterator

self.cities =cities

#可迭代介面,在其內部返回weatheriterator

def__iter__

(self):

#報錯:can't instantiate abstract class weatheriterator with abstract methods __next__,

#即:不能用抽象的方法例項化抽象類weatheriterator ———將next方法改為__next__()方法;

return

weatheriterato

r(self.cities)

#演示,只想要4個城市的氣溫資訊;

for x in weatheriterable([u'

北京', u'

上海', u'

廣州', u'長春'

]):

print(x)

如何實現可迭代物件和迭代器物件 二

之前我們介紹了可迭代物件和迭代器物件,現在我們就實現這兩個物件,滿足實際案例中的需求,解決方案如下 實現乙個迭代器物件weatheriterator,next方法每次返回乙個城市的氣溫 實現乙個可迭代物件weatheriterable,iter 方法返回乙個迭代器物件。如下 coding utf 8...

Python 可迭代物件

1.可迭代物件 以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別 如 list tuple dict set str等 一類是generator,包括生成器和帶yield 的 generator function 這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 2...

python可迭代物件

0 在python中只要是能用for in的,都是可迭代物件,讓我們看下定義 定義 我們已經知道可以對list tuple dict set str等型別的資料使用for in 的迴圈語法,會從其中依次拿到資料元素進行使用,我們把這樣的過程稱為遍歷,也叫迭代。所以我們把可以通過for in 這類語句...