当前位置: 首页 > news >正文

做衣服的网站推荐/济南优化网页

做衣服的网站推荐,济南优化网页,开发一个苹果app需要多少钱,定西市建设局官方网站前言生成器generator生成器的本质是一个迭代器(iterator)要理解生成器,就要在理解一下迭代,可迭代对象,迭代器,这三个概念Python生成器generator简介iteration, iterable, iterator迭代(iteration):在python中迭代通常是通过for...in...来实现的.而且只要是可迭代对象iterable,…

前言

生成器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]:

In [76]: e.__next__()

Out[76]: 2

In [77]: e.__next__()

Out[77]: 3

In [78]: e.__next__()

---------------------------------------------------------------------------

StopIteration Traceback (most recent call last)

in ()

----> 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博客。

http://www.jmfq.cn/news/4784131.html

相关文章:

  • php零基础做网站/郑州黑帽seo培训
  • 长春网站建长春做网站/外链的作用
  • 网站系统建设架构/百度关键字排名软件
  • app产品网站建设/seo外包如何
  • 有没有做京东客好的网站推荐/2023年中国进入一级战备状态了吗
  • 游戏交易平台/百度关键词优化系统
  • 网站后台如何做文件下载连接/b2b电商平台有哪些
  • 整站seo免费咨询/win7系统优化大师
  • 网站做的拖管不行 怎么投诉/广东短视频seo营销
  • vue 做企业网站行不/锦州网站seo
  • 湖南做防水堵漏工程商网站/seo排名工具给您好的建议
  • 域名除了做网站还能做什么/附子seo
  • 靖江做网站/第三波疫情将全面大爆发
  • 网站开发的权限设置/深圳网站建设运营
  • 修改网站默认首页/市场营销推广方案怎么做
  • 网站建设明细报价表 服务器/黄金网站软件免费
  • 自己做百度网站/免费网上申请注册
  • 莱芜区平台公司/文山seo
  • 网站建设的主题什么比较好/sem培训班培训多少钱
  • 网站是香港主机/搜索引擎营销是什么
  • 政府单位建设微网站的好处/产品营销方案策划书
  • 有没有专门做教程的网站/做互联网项目怎么推广
  • 怎样营销网站建设/网络推广服务外包
  • 沈阳工程信息招标网/seo排名优化软件价格
  • wordpress教程创建网页/站内关键词排名优化软件
  • 关于建设校园网站申请/百度allin 人工智能
  • 做外贸生意用哪个网站最好/媒体公关
  • 网站顶部导航代码/网站快速排名上
  • 东莞做小程序的公司/排名优化哪家好
  • 怎么弄一个公司网站/网站优化的意义