python使用生成器实现可迭代对象
本文实例为大家分享了python使用生成器实现可迭代对象的具体代码,供大家参考,具体内容如下
案例分析:
实一个可迭代对象的类,它能迭代出给定范围内所有的素数:
pn = Number(1, 30)
for k in pn:
print(k)
结果为:2,3,5,7,11,13,17,19,23,29
如何解决这个问题?
将该类的__iter__方法实现成生成器函数,每次yield返回一个素数
#!/usr/bin/python3 class Number(object): def __init__(self, start, end): self.start = start self.end = end # 判断一个数字是否是素数 def get_num(self, k): if k >= 2: for i in range(2, k): if k % i == 0: return False return True def __iter__(self): for k in range(self.start, self.end+1): if self.get_num(k): # 是素数yield出去 yield k if __name__ == '__main__': num = Number(2, 30) for i in num: print(i)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
本文实例讲述了python从任意长度的可迭代对象中分解元素操作.分享给大家供大家参考,具体如下: 从某个可迭代对象中分解出N个元素,但是可迭代对象的长度可能超过N,会出现"分解值过多"的异常: 使用"*表达式"来解决该问题: Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 Type "copyright",
-
ES6 迭代器与可迭代对象的实现
ES6 新的数组方法.集合.for-of 循环.展开运算符(...)甚至异步编程都依赖于迭代器(Iterator )实现.本文会详解 ES6 的迭代器与生成器,并进一步挖掘可迭代对象的内部原理与使用方法 一.迭代器的原理 在编程语言中处理数组或集合时,使用循环语句必须要初始化一个变量记录迭代位置,而程序化地使用迭代器可以简化这种数据操作 如何设计一个迭代器呢? 迭代器的本身是一个对象,这个对象有 next( ) 方法返回结果对象,这个结果对象有下一个返回值 value.迭代完成布尔值 done,
-
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
1.iterable iterator区别 要了解两者区别,先要了解一下迭代器协议: 迭代器协议是指:对象需要提供__next__()方法,它返回迭代中的元素,在没有更多元素后,抛出StopIteration异常,终止迭代. 可迭代对象就是:实现了迭代器协议的对象. 协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(如for循环,sum,min,max函数等)通过迭代器协议访问对象,因此,for循环并不需要知道对象具体是什么,只需要知道对象能够实现迭代器协议即可. 迭代器(ite
-
Python可迭代对象操作示例
本文实例讲述了Python可迭代对象.分享给大家供大家参考,具体如下: 1.列表生成式 list = [result for x in range(m, n)] g1 = (i for i in range(101)) print(type(g1)) print(g1) print(g1.__next__()) 输出: <class 'generator'> <generator object <genexpr> at 0x0000024E6AC08F10> 0 g1
-
python生成器,可迭代对象,迭代器区别和联系
生成器,可迭代对象,迭代器之间究竟是什么关系? 用一幅图来概括: 1.生成器 定义生成器 方式一: //区别于列表生成式 gen = [x*x for x in range(5)] gen = (x*x for x in range(5)) print(gen) //Out:<generator object <genexpr> at 0x00000258DC5CD8E0> 方式二: def fib(): prev, curr = 0, 1 while True: yield cu
-
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
我们都知道,序列可以迭代.但是,你知道为什么吗? 本文来探讨一下迭代背后的原理. 序列可以迭代的原因:iter 函数.解释器需要迭代对象 x 时,会自动调用 iter(x).内置的 iter 函数有以下作用: (1) 检查对象是否实现了 iter 方法,如果实现了就调用它,获取一个迭代器. (2) 如果没有实现 iter 方法,但是实现了 getitem 方法,而且其参数是从零开始的索引,Python 会创建一个迭代器,尝试按顺序(从索引 0 开始)获取元素. (3) 如果前面两步都失败,Pyt
-
详解Python中的内建函数,可迭代对象,迭代器
Python中的内建函数和可迭代对象,迭代器 求值标识 id() #标识id 返回对象的唯一标识,CPython返回内存地址 hash() #哈希, 返回对象的哈希值 len(s) -->返回一个集合类型的元素个数 range(start,stop[,step]) -->返回一个从start开始到stop结束,步长为step的可迭代对象.step默认为1 类型判断 type() #返回对象的类型 isinstance(obj,class_or_tuple) ->True|False #判
-
python中的迭代和可迭代对象代码示例
什么是迭代(iteration)呢? 给定一个list或者tuple,通过for循环来遍历这个list或者tuple.这种遍历就是迭代(iteration).只要是可迭代的对象都可以进行迭代.怎么判断一个对象是否是可迭代的对象呢?可以用collections模块里面的iterable包的isinstance函数进行判断: >>> from collections import Iterable#载入模块 >>> isinstance('abc',Iterable) #字
-
python使用生成器实现可迭代对象
本文实例为大家分享了python使用生成器实现可迭代对象的具体代码,供大家参考,具体内容如下 案例分析: 实一个可迭代对象的类,它能迭代出给定范围内所有的素数: pn = Number(1, 30) for k in pn: print(k) 结果为:2,3,5,7,11,13,17,19,23,29 如何解决这个问题? 将该类的__iter__方法实现成生成器函数,每次yield返回一个素数 #!/usr/bin/python3 class Number(object): def __init
-
Python中for循环可迭代对象迭代器及生成器源码学习
目录 问题: 1. 迭代 1.1 可迭代对象Iterable 1.2 迭代器Iterator 1.3 for循环 1.3.1 iter()方法和next()方法 1.3.2 iter()和__iter__() 1.3.3 next()和__next__() 1.3.4 自定义类实现__iter__()和__next__() 1.3.5 探究for循环 2 生成器 2.1 获取生成器 2.2 next(生成器) 2.3 生成器和迭代器 2.4 生成器解析式 问题: 之前在学习list和dict相关
-
Node.js中的异步生成器与异步迭代详解
前言 生成器函数在 JavaScript 中的出现早于引入 async/await,这意味着在创建异步生成器(始终返回 Promise 且可以 await 的生成器)的同时,还引入了许多需要注意的事项. 今天,我们将研究异步生成器及其近亲--异步迭代. 注意:尽管这些概念应该适用于所有遵循现代规范的 javascript,但本文中的所有代码都是针对 Node.js 10.12 和 14 版开发和测试的. 异步生成器函数 看一下这个小程序: // File: main.js const creat
-
python学习之可迭代对象、迭代器、生成器
Iterable – 可迭代对象 能够逐一返回其成员项的对象. 可迭代对象的例子包括所有序列类型 (例如 list, str 和 tuple) 以及某些非序列类型例如 dict, 文件对象以及定义了__iter__()方法或是实现了序列语义的__getitem__() 方法的任意自定义类对象. 可迭代对象可用于 for 循环以及许多其他需要一个序列的地方(zip().map() -).当一个可迭代对象作为参数传给内置函数 iter() 时,它会返回该对象的迭代器.这种迭代器适用于对值集合的一次性
-
稳扎稳打学Python之容器 可迭代对象 迭代器 生成器专题讲解
目录 一.容器 1.什么是容器? 二.可迭代对象 1.什么是可迭代对象? 三.迭代器 四.序列 五.列表推导式 六.生成器 1.生成器的第一种创建方法:生成器表达式 2.生成器的第二种创建方法:yield 七.小结 今天就来给大家讲讲Python中的容器.可迭代对象.迭代器和生成器这些难理解的概念,让你的Python基础更上一层楼! 一.容器 1.什么是容器? 在Python中,容器是把多种元素组织在一起的数据结构,容器中的元素就可以逐个迭代获取.说白了,它的作用就像它的名字一样:用来存放东西(
-
详解Python之可迭代对象,迭代器和生成器
目录 一.概念描述 二.序列的可迭代性 三.经典的迭代器模式 四.生成器也是迭代器 五.实现惰性迭代器 六.使用生成器表达式简化惰性迭代器 总结 一.概念描述 可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可迭代对象内部需要实现__iter__函数来返回其关联的迭代器; 迭代器是负责具体数据的逐个遍历的,其通过实现__next__函数得以逐个的访问关联的数据元素;同时通过实现__iter__来实现对可迭代对象的兼容; 生成器是一种迭代器模式,其实现了数据的惰性生成,即
随机推荐
- 微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
- jQuery中extend函数详解
- JS 面向对象之继承---多种组合继承详解
- php创建多级目录完整封装类操作方法
- 织梦sitemap地图实时推送给百度的教程
- 如何在PHP中进行身份认证
- 用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
- C#生成互不相同随机数的实现方法
- MySQL ERROR 1045 (28000) 错误的解决办法
- php数组函数序列之array_unique() - 去除数组中重复的元素值
- IE6,IE7下js动态加载图片不显示错误
- ajax智能提示+textbox动态生成下拉框示例代码
- 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题
- 超级可爱纯js网页时钟
- WMI 脚本高手不完全手册
- java网上图书商城(7)订单模块2
- javascript实现tab响应式切换特效
- 详解JavaScript调用栈、尾递归和手动优化
- winkey:高手常用的五个组合按钮
- Easyui 关闭jquery-easui tab标签页前触发事件的解决方法