迭代器
成都網(wǎng)站設計、做網(wǎng)站,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)建站已向1000多家企業(yè)提供了,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)絡營銷等服務!設計與技術結合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質網(wǎng)站。迭代器是一個可以記住遍歷的位置的對象,迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。
方法:iter() ,next()。
載體:字符串,列表或元組對象都可用于創(chuàng)建迭代器:
示例:for循環(huán)取出列表和字符串中的元素
list=[1,2,3] it_list = iter(list) for it in it_list: print it str = "abc" it_str = iter(str) for it in it_str: print it
生成器
使用了yield 的函數(shù)被稱為生成器(generator),生成器是一個返回迭代器的函數(shù),只能用于迭代操作。
在調用生成器運行的過程中,每次遇到 yield 時函數(shù)會暫停并保存當前所有的運行信息,返回yield的值。它大的特點在于并非一次性全部生成,而在于每次調用都生成當前一輪循環(huán),再次調用則再次生成,直到循環(huán)結束或是本次生成數(shù)據(jù)已到終點(例如文件讀取完畢或是判斷條件變成false)。
使用yield的函數(shù)并不會一次執(zhí)行完畢,僅僅返回一個迭代對象,當讀取該迭代對象時,它并沒有完全讀取迭代內容,而是根據(jù)代碼需求每次讀取一部分,從而節(jié)約了資源。
函數(shù)執(zhí)行結束時,生成器自動拋出StopIteration異常,表示迭代完成,在for循環(huán)里,無需處理 StopIteration 異常,循環(huán)會正常結束。
在一個生成器函數(shù)中,如果沒有return,則默認執(zhí)行至函數(shù)完畢,如果在執(zhí)行過程中return,則直接拋出 StopIteration 終止迭代。
可以利用 isgeneratorfunction 判斷一個函數(shù)是否是一個特殊的 generator 函數(shù)isgeneratorfunction(readfile)
while True必須有,否則迭代器無法駐留,輪詢一行就會結束;
示例:yield字段將readfile函數(shù)變成一個文件迭代器,每次的輸出都是文件中的一行內容,for循環(huán)調用該函數(shù)時,每次執(zhí)行到y(tǒng)ield data語句時,該函數(shù)就會將當前數(shù)據(jù)保留并傳遞給item,接著再次下一個循環(huán)。
def readfile(): seek = 0 while True: with open('test_server.py','r') as f: f.seek(seek) data = f.readline() if data: seek = f.tell() yield data else: return for item in readfile(): print item
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。