python_迭代器、生成器
# 迭代器 '''被for循环的数据listdictstrsettuplef = open()range()enumerate '''# print(dir([])) # 告诉我列表拥有的所有方法# 双下划线方法:很少直接调用的方法,一般情况下,是通过其他语法触发的 # 只要是能被for循环的数据类型 就一定拥有 __iter__ 方法# [].__iter__():迭代器 --> __next__ # 通过next就可以从迭代器中一个一个的取值
from collections import Iterable # 可迭代的 from collections import Iterator # 迭代器 print(isinstance([],Iterable)) #判断 [] 是不是Iterable的关系 print(isinstance([],Iterator))
#迭代器概念 # 迭代器协议和可迭代协议# 迭代器协议 : 内部含有 __next__ 和 __iter__方法的就是迭代器# 可以被for循环的都是可迭代的# 可迭代的内部都有 __iter__ 方法,可迭代协议:只要含有 __iter__ 方法都是可迭代的 ('__iter__' in dir(数据))# 只要是迭代器 一定可迭代# 可迭代的__iter__() 方法就可以得到一个迭代器# 迭代器中的 __next__() 方法可以一个一个的获取值 # 迭代器的特点 # 很方便使用,且只能取所有的数据取一次 # 节省内存空间 # 生成器# 生成器的本质就是迭代器# 生成器的表现形式 # 生成器函数 # 生成器表达式 # 生成器函数:含有yield关键字的函数就是生成器函数 # 调用函数的之后函数不执行,返回一个生成器 # 调用next方法的时候会取到一个值 # 直到取完最后一个,在执行next会报错
def generator():for i in range(20000):yield '你想要的%s'%ig = generator() # 调用生成器函数得到一个生成器 ret = g.__next__() # 每一次执行g.__next__ 就是从生成器中取值,预示着生成器函数中的代码继续执行 num = 0 for i in g:num += 1if num > 50:breakprint(i)
# 从生成器中取值的几个方法# next# for# 数据类型的强制转换 :占用内存
readline 一行一行读 read(10) # 在读出来的内容前面加上一个'****',再返回给调用着def generator():print(123)content = yield 1print(content)print(456)yield 2g = generator() ret = g.__next__() print(ret) ret = g.send('hello') print(ret)
# send获取下一个值得效果和next基本一致,只是在获取下一个值时候,给上一个值yiled得位置传递一个数据# 使用send注意事项# 第一次使用生成器的时候 是用next获取下一个值# 最后一个 yield 不能接受外部的值
#获取移动平均值def init(func):def inner(*args,**kwargs):rg = func(*args,**kwargs) # g = average()rg.__next__()return rgreturn inner@init def average():sum = 0count = 0avg = 0while True:num = yield avgsum += numcount += 1avg = sum/countrg = average() ret = rg.send(10) print(ret)
# yield from
def gen():a = 'asdfg'b = '12345'yield from a # 能够一个一个取a的值yield from bg = gen() for i in g:print(i)
转载于:https://www.cnblogs.com/niunai/p/10676761.html
python_迭代器、生成器相关推荐
- Python_迭代器和生成器的复习_38
迭代器和生成器 迭代器: 双下方法:很少直接调用的方法,一般情况下,是通过其他方法触发的 可迭代的协议--可迭代协议 含有__iter__ 的方法 ('__iter__' in dir(数据)) 可迭 ...
- 迭代器 生成器 装饰器 匿名函数
迭代器 生成器 装饰器 匿名函数 #可迭代对象:列表.字典.集合.字符串:能够被for 循环遍历的对象# 数字类型不可迭代:# name="wangyifei"# for i in ...
- 迭代器生成器可迭代对象_使用迭代器时如何避免ConcurrentModificationException
迭代器生成器可迭代对象 Java Collection类是快速失败的,这意味着如果在使用迭代器遍历某个线程的同时更改了Collection,则iterator.next()将抛出ConcurrentM ...
- 迭代器 生成器 面向过程编程
迭代器什么是迭代器(iterator)? 器值得某种工具 迭代,指的是更新换代的过程,例如应用程序的版本更新,从1.0编程1.1在变成1.2 迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复 ...
- python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】
python [迭代器 生成器 列表推导式] 一.迭代器 1.迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含 ...
- python自动化_day4_迭代器生成器内置函数和匿名函数
什么是可迭代的 含有__iter__方法的就是可迭代的: python 可迭代对象--Iterable Python中经常使用for来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象, 像常见的 ...
- python学习day13 day14 迭代器 生成器
迭代器 可迭代的: list dic str set tuple f = open() range() enumerate # 显示列表所拥有的所有方法 print(dir([])) 双下方法:很少直 ...
- ES6 | let 关键字 + const关键字 + 箭头函数 + rest参数 + 扩展运算符 ... + Symbol + 迭代器 + 生成器 + 变量的解构赋值 + 模板字符串
目录 ECMASript 相关介绍 ECMASript 6 新特性 let 关键字 const关键字 变量的解构赋值 模板字符串 简化对象写法 箭头函数 => 参数默认值 rest参数 扩展运算 ...
- python基础二 函数 递归 装饰器 迭代器 生成器 内置函数 二分法应用
函数 迭代器 生成器 拆包和装包 tup=("j1","a1","c1","k1") a,b,c,d=tup print ...
- 迭代器/生成器/装饰器 /Json pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
最新文章
- 2018HDU多校训练-3-Problem G. Interstellar Travel
- Android底层开发之旅—蓝牙系统分析
- Redis开发:hash存储自定义Java对象及value的序列化器设置
- SUSE Linux系统安全配置十条
- 让你的ASP.NET Core应用程序更安全
- C#容量超出了最大容量。
- python不支持prelu_MTCNN(九)更改python与c代码的PReLU为ReLU
- 分治法解决逆序对问题
- 已收藏!java面试知识点整理
- CF Fox And Two Dots (DFS)
- 声道测试音频_功率放大器测试方法
- 新增SDK 错误解决办法
- 学习总结-《父与子的编程之旅》chapter 9
- web前端面试题(十一)之如何解决跨域问题?
- 《算法导论》知识点总结
- Oracle中动态SQL详解(EXECUTE IMMEDIATE)
- 荣耀修改WIFI服务器,数码教程资讯:荣耀路由2S怎么修改wifi的802.11n频宽
- python请输入星期几的第一个字母来判断_【Python 实例】面向对象 | 请输入一周中某天的名称的第一个字母来判断以下是星期几,如果第一个字母一样则继续判断第二个字母...
- 大厂面试干货:面试官最喜欢pick什么样的候选人
- 打印机工作原理和维修
热门文章
- OpenCV-图像处理(26、直方图反向投影(Back Projection))
- php java转换为字符串格式_php array 转json及java 转换 json数据格式操作示例
- python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型
- 动态ip地址方案有什么优点和缺点_OA期刊的优点和缺点是什么
- javaee7实现websocket_websocket协议,tcp分包与粘包解决
- python输出重定向_使用Python子进程重定向标准输出到标准输入...
- php物联网github,工欲善其事必先利其器,清点Github上那些优异的PHP项目
- 安装blocksci mac出错_你的Mac与Big Sur兼容吗?
- 加载elementor时出现问题_Elementor新手教程:怎么使用elementor设计网站页面!
- xamarin android 设备,【Xamarin.Android】在Visual Studio中增强设备日志记录