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

网站建设出找不到网页遵义城乡住房建设厅网站

网站建设出找不到网页,遵义城乡住房建设厅网站,营销推广是什么意思,网站开发 只要参考链接#xff1a; Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 __iter__ 和 __next__真正的迭代器总结 python里面有很多的以__开始和结尾的函数#xff0c;利用它们可以完成很多复杂的逻辑代码#xff0c;而且提高了代码的简洁性#xff0c;本文主…参考链接 Python __iter __()和__next __()| 将对象转换为迭代器 文章目录 __iter__ 和 __next__真正的迭代器总结 python里面有很多的以__开始和结尾的函数利用它们可以完成很多复杂的逻辑代码而且提高了代码的简洁性本文主要总结了迭代器用到的魔术方法并且主要以代码例子进行解释。  __iter__ 和 __next__  其实这里需要引入一个概念叫迭代器常见的就是我们在使用for语句的时候python内部其实是把for后面的对象上使用了内建函数iter比如  a [1, 2, 3] for i in a: do_something() 其实在python内部进行了类似如下的转换  a [1, 2, 3] for i in iter(a): do_something() 那么iter返回的是什么呢就是一个迭代对象它主要映射到了类里面的__iter__函数此函数返回的是一个实现了__next__的对象。注意理解这句话比如  class B(object): def __next__(self): raise StopIteration class A(object): def __iter__(self): return B() 我们可以看见A这个类实现了一个__iter__函数返回的是B()的实例对象其中B里面实现了__next__这个函数。  下面引入几个概念 Iterable: 有迭代能力的对象一个类实现了__iter__那么就认为它有迭代能力通常此函数必须返回一个实现了__next__的对象如果自己实现了你可以返回self当然这个返回值不是必须的 Iterator: 迭代器(当然也是Iterable)同时实现了__iter__和__next__的对象缺少任何一个都不算是Iterator比如上面例子中A()可以是一个Iterable但是A()和B()都不能算是和Iterator因为A只实现了__iter__而B只实现了__next__()。  我们可以使用collections里面的类型来进行验证  class B(object): def __next__(self): raise StopIteration class A(object): def __iter__(self): return B() from collections.abc import * a A() b B() print(isinstance(a, Iterable)) print(isinstance(a, Iterator)) print(isinstance(b, Iterable)) print(isinstance(b, Iterator)) 结果是  True False False False 让我们稍微对B这个类做一点修改  class B(object): def __next__(self): raise StopIteration def __iter__(self): return None class A(object): def __iter__(self): return B() from collections.abc import * a A() b B() print(isinstance(a, Iterable)) print(isinstance(a, Iterator)) print(isinstance(b, Iterable)) print(isinstance(b, Iterator)) 结果是  True False True True 真正的迭代器  上面只是做了几个演示这里具体说明一下: 当调用iter函数的时候生成了一个迭代对象要求__iter__必须返回一个实现了__next__的对象我们就可以通过next函数访问这个对象的下一个元素了并且在你不想继续有迭代的情况下抛出一个StopIteration的异常(for语句会捕获这个异常并且自动结束for)下面实现了一个自己的类似range函数的功能。  class MyRange(object): def __init__(self, end): self.start 0 self.end end def __iter__(self): return self def __next__(self): if self.start self.end: ret self.start self.start 1 return ret else: raise StopIteration from collections.abc import * a MyRange(5) print(isinstance(a, Iterable)) print(isinstance(a, Iterator)) for i in a: print(i) 结果是  True True 0 1 2 3 4 接下来我们使用next函数模拟一次  class MyRange(object): def __init__(self, end): self.start 0 self.end end def __iter__(self): return self def __next__(self): if self.start self.end: ret self.start self.start 1 return ret else: raise StopIteration a MyRange(5) print(next(a)) print(next(a)) print(next(a)) print(next(a)) print(next(a)) print(next(a)) # 其实到这里已经完成了我们在运行一次查看异常 可以看见一个很明显的好处是每次产生的数据是产生一个用一个什么意思呢比如我要遍历[0, 1, 2, 3.....]一直到10亿如果使用列表的方式那么是会全部载入内存的但是如果使用迭代器可以看见当用到了(也就是在调用了next)才会产生对应的数字这样就可以节约内存了这是一种懒惰的加载方式。  总结  可以使用collection.abs里面的Iterator和Iterable配合isinstance函数来判断一个对象是否是可迭代的是否是迭代器对象iter实际是映射到了__iter__函数只要实现了__iter__的对象就是可迭代对象(Iterable)正常情况下应该返回一个实现了__next__的对象(虽然这个要求不强制)如果自己实现了__next__当然也可以返回自己同时实现了__iter__和__next__的是迭代器(Iterator)当然也是一个可迭代对象了其中__next__应该在迭代完成后抛出一个StopIteration异常for语句会自动处理这个StopIteration异常以便结束for循环  生成器相关的文档已经在这里。
http://www.pierceye.com/news/790244/

相关文章:

  • 网站策划书内容wordpress 一键恢复
  • wordpress+外观+权限seo排名工具
  • 江苏企业网站制作哪家好潍坊网站开发招生信息
  • 建设一个地方门户网站网站名称搜索不到
  • 南江县住房和城乡建设局网站上海seo关键词优化
  • 门窗厂家东莞网站建设湖南健康码
  • 企业网站建设的背景和目的互联网政务服务平台
  • 化州市住房和城乡建设局网站开发网站心得
  • 网站设计制作公司需要什么资质python h5网站开发
  • 广东深圳广东深圳网站建设惠州网站开发公司电话
  • 建管家企业网站discuz仿wordpress
  • 老网站不要了做新站需要怎么处理平面广告设计赏析
  • 怎么看网站是不是php语言做的网站系统优点
  • 旅游网站建设 策划书销售app哪个好用
  • 建个大型网站要多少钱wordpress页眉设置
  • 浅谈网站建设开发浙江中联建设集团网站
  • 哪有做网站全包圆装修公司
  • 邵阳建设银行网站是多少建设银行 企业
  • 网站开源系统网页制作与网站建设思维导图
  • 专门做前端项目的一些网站wordpress 朋友圈插件
  • 网站建设哪家专业网站开发费用怎么做账
  • 用dw怎么做网站首页wordpress 文章页面失败
  • 郑州网站制作专业乐云seowordpress it博客主题
  • 支付宝手机网站支付二维码怎么做网站 开发
  • 教育网站制作视频代理网址ag80hncom
  • 泰兴公司做网站建设制作外贸网站公司
  • 手机wap网站大全作品提示优化要删吗
  • 郑州网站建设技术支持云南澄江县建设局网站
  • wordpress建企业网站设置网站一级域名和二级域名
  • 云南省城乡与住房建设厅网站合肥网红打卡地