日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python生成器generator原理及用法解析

瀏覽:222日期:2022-07-16 18:30:14

前言

生成器generator

生成器的本質(zhì)是一個迭代器(iterator)

要理解生成器,就要在理解一下迭代,可迭代對象,迭代器,這三個概念

Python生成器generator簡介

iteration, iterable, iterator

迭代(iteration):在python中迭代通常是通過for...in...來實(shí)現(xiàn)的.而且只要是可迭代對象iterable,都能進(jìn)行迭代.

可迭代對象(iterable):Python中的任意的對象,只要它定義了可以返回一個迭代器的 __iter__方法,或者定義了可以支持下標(biāo)索引的__getitem __方法,那么它就是一個可迭代對象。簡單說,可迭代對象就是能提供迭代器的任意對象.返回的是一個iterator 對象.官方解釋

迭代器(iterator ) : 簡單的說,迭代器就是實(shí)現(xiàn)了iterator.__iter__() 和iterator.__next__() 的對象,iterator.__iter__()方法返回的是iterator對象本身.根據(jù)官方的說法,正是這個方法,實(shí)現(xiàn)了for ... in ...語句.而iterator.__next__()是iterator區(qū)別于iterable的關(guān)鍵了,它允許我們顯式地獲取一個元素.當(dāng)調(diào)用next()方法時(shí),實(shí)際上產(chǎn)生了2個操作:

更新iterator狀態(tài),令其指向后一項(xiàng),以便下一次調(diào)用,每一個值過后,指針移動到下一位,對iterator遍歷完后,其變成了一個空的容器,但不是None ,需要注意的是,迭代結(jié)束后,指針不會自動返回到首位,而是依舊停留在末位置,想要在開始,需要重新載入迭代對象.

實(shí)例理解:

>>> from collections import Iterable, Iterator >>> a = [1,2,3] # 眾所周知,list是一個iterable >>> b = iter(a) # 通過iter()方法,得到iterator,iter()實(shí)際上調(diào)用了__iter__(), >>> isinstance(a, Iterable) True >>> isinstance(a, Iterator) False >>> isinstance(b, Iterable) True >>> isinstance(b, Iterator) True

可見,itertor 一定是iterable ,但iterable不一定是itertor

>>> dir(a) [’__add__’,’__class__’,’__contains__’,’__delattr__’,’__delitem__’,’__dir__’,’__doc__’,’__eq__’,’__format__’,’__ge__’,’__getattribute__’,’__getitem__’,’__gt__’,’__hash__’,’__iadd__’,’__imul__’,’__init__’,’__iter__’,’__le__’,’__len__’,’__lt__’,’__mul__’,’__ne__’,’__new__’,’__reduce__’,’__reduce_ex__’,’__repr__’, ’__reversed__’,’__rmul__’, ’__setattr__’,’__setitem__’,’__sizeof__’,’__str__’, ’__subclasshook__’,’append’,’clear’ ’copy’,’count’,’extend’,’index’,’insert’, ’pop’,’remove’, ’reverse’,’sort’] >>>dir(b) [’__class__’,’__delattr__’, ’__dir__’, ’__doc__’,’__eq__’, ’__format__’,’__ge__’ ,’__getattribute__’, ’__gt__’,’__hash__’,’__init__’,’__iter__’,’__le__’,’__length_hint__’, ’__lt__’,’__ne__’,’__new__’,’__next__’,’__reduce__’,’__reduce_ex__’,’__repr__’,’__setattr__’, ’__setstate__’,’__sizeof__’,’__str__’,’__subclasshook__’]

可以看到迭代器具有__next__ 這個方法,可迭代對象具有__getitem__

迭代器是消耗型的,隨著指針的移動,遍歷完畢以后,就為空,但是不是None

>>> c = list(b) >>> c [1, 2, 3] >>> d = list(b) >>> d [] # 空的iterator并不等于None. >>> if b: ... print(1) ... 1 >>> if b == None: ... print(1) ...

使用迭代器的內(nèi)置方法 __next__ 和 next() 方法,遍歷元素

In [73]: e = iter(a) In [74]: next(e) Out[74]: 1 In [75]: e.__next__ Out[75]: <method-wrapper ’__next__’ of list_iterator object at 0x7f05571c8518> In [76]: e.__next__() Out[76]: 2 In [77]: e.__next__() Out[77]: 3 In [78]: e.__next__() --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-78-6024b5bd9bd2> in <module>() ----> 1 e.__next__() StopIteration:

當(dāng)遍歷完畢時(shí),會返回一個StopIteration 的錯誤.

for...in.... 遍歷迭代

當(dāng)我們對一個iterable 使用for ....in... 進(jìn)行遍歷時(shí),實(shí)際上是想調(diào)用iter() 方法得到一個iterator ,假設(shè)為x ,然后循環(huán)的調(diào)用x 的__next__() (next())方法,取得每一次的值,直到iterator為空,返回StopIteration 作為循環(huán)的結(jié)束的標(biāo)準(zhǔn).for....in...會自動處理 StopIteration 異常,從而避免了拋出異常,從而使程序中斷.流程圖為:

x = [1, 2, 3]for i in x:print(x)

Python生成器generator原理及用法解析

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产欧美一区二区| 欧美日韩第一| 日韩不卡一区二区| 欧美日韩xxxx| 欧美一区自拍| 久久wwww| 色乱码一区二区三区网站| 亚洲精品成人图区| 私拍精品福利视频在线一区| 中文字幕系列一区| 久久在线视频免费观看| 欧美午夜精彩| 影音国产精品| 视频一区二区三区入口| 综合一区二区三区| 国产精品综合| 在线亚洲人成| 亚洲国内精品| 亚洲乱亚洲高清| 国产精品最新自拍| 成人小电影网站| 不卡中文字幕| 亚洲+小说+欧美+激情+另类| 国产毛片久久久| 国产精品毛片久久| 久久九九国产| 亚洲激情五月| 日本成人中文字幕| 精品国产aⅴ| 久久视频精品| 日韩精品视频网| 岛国av在线网站| 午夜精品一区二区三区国产| 亚洲精品欧洲| 精品亚洲成人| 最新国产拍偷乱拍精品| 日韩激情av在线| 神马久久午夜| 亚洲我射av| 国产一区精品福利| 婷婷成人基地| 日本国产欧美| www.com.cn成人| 亚洲免费观看高清完整版在线观| 久久精品国产成人一区二区三区| 久久高清免费| 日韩高清在线不卡| 欧美精品日日操| 日韩午夜视频在线| 美女福利一区二区三区| 亚洲欧洲日韩精品在线| 国产一区二区三区黄网站| 亚洲综合精品| 精品三级在线观看视频| 午夜在线观看免费一区| 国产精品扒开腿做爽爽爽软件| 久久久精品五月天| 青青草国产成人99久久| 欧美91精品| 国产精品高清一区二区| 亚洲成人一区| 老司机精品视频网| 美女精品网站| 黑人精品一区| 91国内精品| 影院欧美亚洲| 91欧美在线| 日韩国产欧美在线视频| 久久美女性网| 国产精品久久久久久妇女| 午夜久久福利| 国产激情久久| 中文字幕日韩高清在线| 91精品蜜臀一区二区三区在线| 欧美天堂在线| 黄色亚洲精品| 日本综合字幕| 麻豆精品在线| 日韩手机在线| 久久国产高清| 亚洲高清av| 日本一区二区高清不卡| 伊人精品视频| 99久久精品网| 国际精品欧美精品| 日韩精品欧美精品| 99成人在线| 久久激情网站| 国产拍在线视频| 国产精品porn| 日韩av成人高清| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日本一不卡视频| 欧美日韩国产亚洲一区| 久久精品一本| 国产视频一区二| 无码日韩精品一区二区免费| 欧美日韩国产探花| 99精品在线| 色一区二区三区| 成人国产精品一区二区网站| 国产精品美女午夜爽爽| 日韩欧美在线精品| 亚洲精品乱码| 亚洲精品观看| 综合欧美精品| 最新国产精品视频| 一区二区国产在线| 国产精品美女久久久浪潮软件| 国产 日韩 欧美一区| 精品欧美视频| 日韩av影院| 欧美日韩1区| 欧美日韩精品一区二区三区视频 | 人人香蕉久久| 日韩久久精品网| 色偷偷偷在线视频播放| 久草免费在线视频| 日产精品一区二区| 精品国产麻豆| 国产69精品久久| 成人国产精品| 91视频一区| 美女福利一区二区三区| 久久三级视频| 日韩视频不卡| 免费的成人av| 无码日韩精品一区二区免费| 97精品资源在线观看| 国产日产精品_国产精品毛片| 欧美一区激情| 久久99影视| 日韩1区在线| 成人精品亚洲| 自拍日韩欧美| 亚洲免费网址| 亚洲精品成人一区| 国产视频一区二区在线播放| 国产高清亚洲| 中文在线免费视频| 久久久久久久久久久妇女| 欧美.日韩.国产.一区.二区| 久久成人亚洲| 91精品尤物| 久久精品二区亚洲w码| 在线观看精品| 妖精视频成人观看www| 亚洲一区二区三区四区电影| 日韩国产欧美三级| 国产精品超碰| 特黄特色欧美大片| 石原莉奈在线亚洲三区| 国产日韩中文在线中文字幕| 国产专区精品| 99国产精品| 国产调教一区二区三区| 都市激情国产精品| 亚洲欧美日韩国产综合精品二区| 亚洲欧美久久精品| 成人国产精品久久| 国产视频一区在线观看一区免费| 日韩精品三级| 岛国av在线网站| 亚洲综合电影一区二区三区| 91大神在线观看线路一区| 成人亚洲精品| 香蕉成人久久| 国内在线观看一区二区三区| 久久香蕉国产| 欧美精品影院| 久久三级福利| 欧美一级一区| 99久久久久国产精品| 日韩精品三区四区| 日韩在线高清| 日韩高清不卡一区二区| 国产成人免费精品| 国产精品美女久久久浪潮软件| 国产日韩在线观看视频| 日韩一区欧美| 日韩在线观看一区二区三区| 日韩.com| 日韩欧美久久| 国产精品xxxav免费视频| 免费久久久久久久久| 国产日韩高清一区二区三区在线| 久久国产亚洲精品| 欧美日一区二区三区在线观看国产免 | 亚久久调教视频| 日韩av在线播放网址| 亚洲18在线| 欧美一级精品| 欧美日本三区| 国产一区成人| 亚洲国产欧美日本视频| 国产日韩欧美三区| 午夜一区在线| 日本在线精品| 国产精品xxx在线观看| 免费人成在线不卡|