python迭代 可迭代物件與迭代器物件

2021-09-25 19:17:03 字數 2310 閱讀 1781

問題舉例

某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示:

北京:15~22

上海:18~23

如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,

並且浪費儲存空間,我們期望以「用時訪問」的策略,並且把所有城市的氣溫資訊封裝

到乙個物件裡,可用for語句進行迭代。

來個栗子

list1 = [1, 2, 3, 4, 5]

for ele in

list1:

print

(ele)

it =iter(list1)

next(it)

next(it)

next(it)

next(it)

next(it)

next(it)

for迴圈中in後面的物件一定為可迭代物件

iter()返回乙個可迭代器物件,由可迭代物件生成

next()方法對迭代器物件進行迭代

最後報異常stopiteration

迭代器物件為一次性消費,用完不可再生,

如果要使用,需要重新拿到迭代器,

兩個迭代器之間無干擾。

栗子

list1 = [1, 2, 3, 4, 5]

it1 =iter(list1)

print(next(it1)) #

1print(next(it1)) #

2print("

\nfor loop")

for x in

it1:

print

(x)#3#

4#5print("

\nno interference between two iters")

it2 =iter(list1)

it3 =iter(list1)

print(next(it2)) #

1print(next(it3)) #

1print(next(it2)) #

2print(next(it3)) #

2

迭代器物件是乙個可迭代物件又是乙個迭代器物件,呼叫可迭代介面(__iter__)返回它自身。

可迭代物件每次都建立乙個迭代器。

step1:實現乙個迭代器物件weatheriterator,__next__每次返回乙個城市的氣溫資訊

step2:實現乙個可迭代物件weatheriterable,__iter__方法返回乙個weatheriterator物件

**:

from collections import

iterable, iterator

import

requests

class

weatheriterator(iterator):

def__init__

(self, cities):

self.cities =cities

self.index =0

def__next__

(self):

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

raise

stopiteration

city =self.cities[self.index]

self.index += 1

return

self.get_weather(city)

defget_weather(self, city):

url = '

' +city

r =requests.get(url)

data = r.json()['

data

']['

forecast

'][0]

return city, data['

high

'], data['

low'

]class

weatheriterable(iterable):

def__init__

(self, cities):

self.cities =cities

def__iter__

(self):

return

weatheriterator(self.cities)

defshow(w):

for x in

w:

print

(x)w = weatheriterable(['

北京', '

上海', '

廣州'] * 10)

show(w)

python 迭代器與可迭代物件

主要有兩個方法next 與iter next不斷返回下乙個元素,知道元素全部返回後出現異常,可以節省記憶體空間。iter是迭代,可以把乙個列表直接轉換成迭代器,然後使用next 方法。data list 1,2,3,4,5 data list iter data list print next da...

Python 迭代器與可迭代物件

迭代器可以讓我們訪問集合的時候變得非常方便。之前我們通過for.in.的方式訪問乙個集合的時候,就是使用迭代器完成的。如果沒有迭代器,那麼我們只能通過while迴圈,每次迴圈的時候通過下標訪問了。可以直接使用for迴圈遍歷的物件,成為可迭代的物件,常見的可迭代的物件有 list tuple dict...

Python迭代器與可迭代物件

當掃瞄記憶體中放不下的資料集時,我們需要找到一種惰性獲取資料項的方式,每次 取出 1個。這就是迭代器相對於普通可迭代物件的優勢 節省記憶體 l orange pear 列表就是乙個可迭代物件在python中,很多內建的資料型別都是可迭代物件,如列表,字串,元組,字典,集合等 如果要自己構建乙個可迭代...