最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年07月20日 10:16:31   作者:吃著東西不想停  
這篇文章主要介紹了Python生成器generator原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

生成器generator

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

要理解生成器,就要在理解一下迭代,可迭代對(duì)象,迭代器,這三個(gè)概念

Python生成器generator簡(jiǎn)介

iteration, iterable, iterator

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

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

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

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

實(shí)例理解:

 >>> from collections import Iterable, Iterator
 >>> a = [1,2,3]  # 眾所周知,list是一個(gè)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__ 這個(gè)方法,可迭代對(duì)象具有__getitem__

迭代器是消耗型的,隨著指針的移動(dòng),遍歷完畢以后,就為空,但是不是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í),會(huì)返回一個(gè)StopIteration 的錯(cuò)誤.

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

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python類的動(dòng)態(tài)綁定實(shí)現(xiàn)原理

    Python類的動(dòng)態(tài)綁定實(shí)現(xiàn)原理

    這篇文章主要介紹了Python類的動(dòng)態(tài)綁定實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 利用Python實(shí)現(xiàn)給圖像添加標(biāo)簽

    利用Python實(shí)現(xiàn)給圖像添加標(biāo)簽

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)給指定的圖片添加標(biāo)簽,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-07-07
  • 使用tf.keras.MaxPooling1D出現(xiàn)錯(cuò)誤問題及解決

    使用tf.keras.MaxPooling1D出現(xiàn)錯(cuò)誤問題及解決

    這篇文章主要介紹了使用tf.keras.MaxPooling1D出現(xiàn)錯(cuò)誤問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Pytorch中accuracy和loss的計(jì)算知識(shí)點(diǎn)總結(jié)

    Pytorch中accuracy和loss的計(jì)算知識(shí)點(diǎn)總結(jié)

    在本片文章里小編給大家整理的是關(guān)于Pytorch中accuracy和loss的計(jì)算相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • 使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程

    使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程

    Twisted的異步工作模式使其在非阻塞情況下可以擁有較高的性能,這里我們來看一下使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程,包括服務(wù)器端與客戶端的實(shí)踐.
    2016-05-05
  • python集合比較(交集,并集,差集)方法詳解

    python集合比較(交集,并集,差集)方法詳解

    python的set,是一個(gè)無(wú)序不重復(fù)元素集, 基本功能包括關(guān)系測(cè)試和消除重復(fù)元素本文講述了python中set集合的比較方法包括交集,并集,差集
    2018-09-09
  • Python?Django教程之實(shí)現(xiàn)新聞應(yīng)用程序

    Python?Django教程之實(shí)現(xiàn)新聞應(yīng)用程序

    Django是一個(gè)用Python編寫的高級(jí)框架,它允許我們創(chuàng)建服務(wù)器端Web應(yīng)用程序。在本文中,我們將了解如何使用Django創(chuàng)建新聞應(yīng)用程序,感興趣的可以嘗試一下
    2022-10-10
  • python自定義函數(shù)def的應(yīng)用詳解

    python自定義函數(shù)def的應(yīng)用詳解

    這篇文章主要介紹了python自定義函數(shù)def的應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例

    python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例

    這篇文章主要介紹了python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 在Pycharm中設(shè)置默認(rèn)自動(dòng)換行的方法

    在Pycharm中設(shè)置默認(rèn)自動(dòng)換行的方法

    今天小編就為大家分享一篇在Pycharm中設(shè)置默認(rèn)自動(dòng)換行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評(píng)論

宜黄县| 从江县| 高唐县| 遵义市| 建湖县| 大竹县| 桦川县| 万盛区| 天津市| 平阴县| 岑巩县| 若羌县| 策勒县| 保德县| 天镇县| 绥中县| 张家川| 中阳县| 静海县| 正安县| 安丘市| 金门县| 莫力| 石渠县| 宜昌市| 乌拉特后旗| 错那县| 呼图壁县| 元阳县| 昂仁县| 丹巴县| 张家口市| 刚察县| 东莞市| 凉城县| 阳江市| 平罗县| 太保市| 临泽县| 南宁市| 报价|