python 迭代器與可迭代物件

2021-08-19 08:07:15 字數 1991 閱讀 7036

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

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

data_list=iter(data_list)

print next(data_list)

print next(data_list)

print next(data_list)

返回結果:

1

23

迭代器(iterator)與可迭代物件(iterable)的區別

1. 只要可以用作for迴圈的都是可迭代物件

2. 只要可以用next()函式的都是迭代器物件

3. 列表,字典,字串是可迭代物件但是不是迭代器物件,如果想變成迭代器物件可以使用iter()進行轉換

4. python的for迴圈本質上是使用next()進行不斷呼叫

5. 一般由可迭代物件變迭代器物件

要求:抓取城市的天氣資訊,並且依次顯示。

困惑:如果一次抓取全部的資訊在返回,等待時間長,浪費儲存空間。

分析:實現乙個迭代器物件weather,使用next()方法每次返回乙個城市的氣溫。再實現乙個可迭代物件weather1,使用iter方法返回乙個迭代器物件。

import sys

import requests

from collections import iterable,iterator

reload(sys)

sys.setdefaultencoding('utf-8')

class weather(iterator):

# 天氣迭代器,繼承iterator,使用next

def __init__(self,citys):

# 構造器 描述哪些城市

self.citys = citys

self.index = 0

# 記錄迭代的位置

def getweather(self,city):

r = requests.get("" + city)

data = r.json()['data']['forecast'][0]

#print data

return '%s:%s,%s'%(city,data['low'],data['high'])

def next(self):

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

# 當全部的城市載入完畢

raise stopiteration

city = self.citys[self.index]

# 迭代出當前城市

self.index +=1

return self.getweather(city)

# 返回出城市的氣溫資訊

class weather1(iterable):

# 可迭代物件,繼承iterable,使用_iter__

def __init__(self,city):

self.city = city

# 內部維護citys,為了傳給iter

def __iter__(self):

return weather(self.city)

#可迭代介面,返回上面的weather

for x in weather1([u'北京','上海','南京','廣州','深圳','長沙']):print x

執行結果:

北京:低溫 12℃,高溫 25℃

上海:低溫 12℃,高溫 21℃

南京:低溫 11℃,高溫 22℃

廣州:低溫 17℃,高溫 24℃

深圳:低溫 16℃,高溫 22℃

長沙:低溫 15℃,高溫 26℃

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

問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...

Python 迭代器與可迭代物件

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

Python迭代器與可迭代物件

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