小編給大家分享一下python迭代器和生成器區(qū)別有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司,提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
迭代器是一個更抽象的概念,任何對象,如果它的類有 next 方法和 iter 方法返回自己本身,對于 string、list、dict、tuple 等這類容器對象,使用 for 循環(huán)遍歷是很方便的。
在后臺 for 語句對容器對象調(diào)用 iter()函數(shù),iter()是 python 的內(nèi)置函數(shù)。iter()會返回一個定義了 next()方法的迭代器對象,它在容器中逐個訪問容器內(nèi)元素,next() 也是 python 的內(nèi)置函數(shù)。在沒有后續(xù)元素時,next()會拋出一個 StopIteration 異常。
# 隨便定義一個list listArray=[1,2,3] # 使用iter()函數(shù) iterName=iter(listArray) print(iterName)
生成器(Generator)是創(chuàng)建迭代器的簡單而強大的工具。它們寫起來就像是正規(guī)的函數(shù),只是在需要返回數(shù)據(jù)的時候使用 yield 語句。每次 next()被調(diào)用時,生成器會返回它脫離的位置(它記憶語句最后一次執(zhí)行的位置和所有的數(shù)據(jù)值)
# 菲波那切數(shù)列 def Fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return '親!沒有數(shù)據(jù)了...' # 調(diào)用方法,生成出10個數(shù)來 f=Fib(10) # 使用一個循環(huán)捕獲最后return 返回的值,保存在異常StopIteration的value中 while True: try: x=next(f) print("f:",x) except StopIteration as e: print("生成器最后的返回值是:",e.value) break
區(qū)別:
生成器能做到迭代器能做的所有事,而且因為自動創(chuàng)建了 iter()和 next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表達式取代列表解析可以同時節(jié)省內(nèi)存。除了創(chuàng)建和保存程序狀態(tài)的自動方法,當發(fā)生器終結(jié)時,還會自動拋出 StopIteration 異常。
看完了這篇文章,相信你對python迭代器和生成器區(qū)別有哪些有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站欄目:python迭代器和生成器區(qū)別有哪些
分享網(wǎng)址:http://jinyejixie.com/article16/psgogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、App開發(fā)、軟件開發(fā)、做網(wǎng)站、域名注冊、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)