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

美丽阿坝网站怎么做有代做医学统计图的网站吗

美丽阿坝网站怎么做,有代做医学统计图的网站吗,品牌建设费用包括哪些,成都住建局官网app迭代器协议 对象必须提供一个 next() 方法,执行该方法要么迭代下一项,要么就引起一个 StopIteration异常以终止迭代(只能往后不能往前)—— 迭代器协议 协议是一种约定,可迭代对象实现了迭代器协议(for、…

迭代器协议

对象必须提供一个 next() 方法,执行该方法要么迭代下一项,要么就引起一个 StopIteration异常以终止迭代(只能往后不能往前)—— 迭代器协议

协议是一种约定,可迭代对象实现了迭代器协议(for、sum、min、max 等使用迭代器协议访问对象)

可迭代对象(iterable)

实现了迭代器协议的对象,就是可迭代对象。如何实现迭代器协议:对象内部定义 __iter__() 方法。

可作用于 for 循环的对象统称为可迭代对象,能作用于 for 循环的数据类型有以下几种:

  • 集合数据类型:liststrtupledicttuple
  • 生成器 generator:包括生成器函数和带 yield 关键字的生成器对象

可以用 isinstance() 判断一个对象是否是可迭代对象:

from collections import Iterableisinstance([], Iterable)			# True
isinstance('123', Iterable)			# True
isinstance(123, Iterable)			#  False

可迭代对象是可迭代的(即能被 for 循环),但不是迭代器,因为 next() 函数无法调用它们:

next([1, 2, 3])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-38-4a6488f07b8e> in <module>()
----> 1 next([1, 2, 3])TypeError: 'list' object is not an iterator		# list 对象不是一个迭代器

但是可以用 iter() 函数将其转换为迭代器:

l = [1, 2, 3]
ret = iter(l)		# 转换为迭代器
next(ret)			# 调用 next() 函数------------------------
1

迭代器(iterator)

可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator

迭代器对象从集合第一个元素开始访问,直到所有元素被访问完才算结束,只能往前不能往后。

使用isinstance()判断一个对象是否是Iterator对象:

from collections import Iterator
isinstance([], Iterator)        					# list 不是迭代器对象,False
isinstance(iter([1, 2, 3]), Iterator)   			# 用 iter() 将 list 转换为迭代器,True
isinstance((x for x in range(10)), Iterator)   		# 生成器是迭代器对象

迭代器惰性机制

迭代器表示的是一个数据流,可以调用 next() 函数不断返回下一个数据,直至没有数据抛出 StopIteration。可以说它是一个有序序列,但我们不知道序列长度,只能通过 next() 函数实现按需计算下一个数据,所有它是惰性的,只有在需要时才计算返回下一个数据。


为什么要有迭代器

对于有序序列类型,使用索引以及 while 循环也难遍历所有元素,但是对于无序序列类型(字典、集合)就会束手无策。


for 循环机制

for 循环是基于迭代器协议提供了一个统一的可遍历所有对象的方法,调用对象的 __iter__() 方法将其转换为一个迭代器,再调用 __next__() 不断取出序列中元素。相比较迭代器而已,for 循环还完成了 StopIteration 的异常工作。

这样一来,只要是序列,都可以通过 for 循环遍历,不管是有序还是无序序列类型。


优缺点

优点:

  • 提供一种不依赖于索引的迭代方式
  • 惰性计算,节省内存(每次取值,才会加载)

缺点:

  • 无法获取长度,next() 完毕才知道
  • 一次性,只能往前,不能往后

自定义类为迭代器

要想将自定义的类实现为一个迭代器,需要在类中实现 __iter__()__next__()方法:

  • __iter__() 方法:返回迭代器对象本身
  • __next__() 方法:返回容器中下一个元素,当超出边界时触发 StopIteration 异常终止迭代器
class Foo(object):def __init__(self,step):self.step = stepdef __next__(self):if self.step == 0:raise StopIterationself.step -= 1return self.stepdef __iter__(self):return self
f = Foo(6)
for i in f:print(i)
5
4
3
2
1
0

总结

  • 可以 for 循环的对象都是可迭代类型
  • 可以作用于 next() 函数的对象都是迭代器类型,它表示一个惰性计算的序列
  • listdictstr 等都是可迭代的,但不是迭代器类型,因为没有 next() 方法,可以用 iter() 函数将其转换为迭代器
  • Python 的 for 循环机制其实质是不断调用 next() 函数实现的,但是它超出边界不会触发 StopIteration
  • for 循环一次将所有数取出,迭代器一次只取一个
http://www.yayakq.cn/news/469014/

相关文章:

  • 有效的网站建设公理财网站开发
  • 网站建设公司的小程序选择什么wordpress怎么用地图
  • 网站建设与管理书籍昆明网红
  • 网站建设与推广的区别网站建设外地便宜
  • 企业做网站算办公费用吗织梦做的网站怎么加弹窗
  • 如何批量入侵WordPress站wordpress实例教程
  • 泰国一家做男模的网站学网页设计有什么网站
  • 衡水网站建设最新报价apico云开发平台
  • 旅游网站开发意义和价值团购网站建设报价
  • 义乌个人兼职做建设网站查看网站架构
  • 重庆有名的网站建设酒店网站模板下载
  • 北京代理记账公司电话怀化 优化生育政策
  • 观澜小学网站建设设计公司上市企业
  • 个人网站设计教程专门做护肤品网站
  • 做外贸如何建立网站平台成都微网站公司
  • 杭州网站建设公司 4000262263农业科技工作服务站建站模板
  • 网站建设价格明细表和网站预算制作动画网站模板
  • 东阳网站建设dyfwzx助君网络怎么样
  • 网站建设推广襄樊wordpress移动端禁止放大
  • 网站建设项目工作分解属于网页制作工具的是
  • 泗泾做网站公司广州4a广告公司名单
  • 福州建设发展集团有限公司网站产品设计网站官网
  • 南浔区住房和城乡建设网站网络销售模式有哪些
  • 网站建设总流程图vps里面设置了一下读取和写入网站无法显示了
  • 简单网站开发实例商城网站服务器
  • 网站域名注册的相关证书证明文件各行业关键词
  • 微信代运营的公司网站上海网络推广服务
  • 设计 网站 源码网站建设流程发布网站和网页制作
  • 怎么制作网站域名如何做专业网站的线下推广
  • 那些网站专门做棋牌推广的网站备案进程查询