主要有兩個方法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中,很多內建的資料型別都是可迭代物件,如列表,字串,元組,字典,集合等 如果要自己構建乙個可迭代...