电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

前言

生成器generator

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

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

Python生成器generator簡介

iteration, iterable, iterator

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

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

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

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

實例理解:

>>> from collections import Iterable, Iterator >>> a = [1,2,3] # 眾所周知,list是一個iterable >>> b = iter(a) # 通過iter()方法,得到iterator,iter()實際上調用了__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) ...

使用迭代器的內置方法 __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:

當遍歷完畢時,會返回一個StopIteration 的錯誤.

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 好看的韩国漫画_韩漫在线免费阅读-汗汗漫画 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 双菱电缆-广州电缆厂_广州电缆厂有限公司| 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 金联宇电缆|广东金联宇电缆厂家_广东金联宇电缆实业有限公司 | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 楼承板-开闭口楼承板-无锡海逵楼承板 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 高尔夫球杆_高尔夫果岭_高尔夫用品-深圳市新高品体育用品有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 阁楼货架_阁楼平台_仓库仓储设备_重型货架_广州金铁牛货架厂 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 专注氟塑料泵_衬氟泵_磁力泵_卧龙泵阀_化工泵专业品牌 - 梭川泵阀 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 深圳市超时尚职业培训学校,培训:月嫂,育婴,养老,家政;化妆,美容,美发,美甲. | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 大连海岛旅游网>>大连旅游,大连海岛游,旅游景点攻略,海岛旅游官网 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 精密模具加工制造 - 富东懿 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] |