# 迭代器

'''被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_迭代器、生成器相关推荐

  1. Python_迭代器和生成器的复习_38

    迭代器和生成器 迭代器: 双下方法:很少直接调用的方法,一般情况下,是通过其他方法触发的 可迭代的协议--可迭代协议 含有__iter__ 的方法 ('__iter__' in dir(数据)) 可迭 ...

  2. 迭代器 生成器 装饰器 匿名函数

    迭代器 生成器 装饰器 匿名函数 #可迭代对象:列表.字典.集合.字符串:能够被for 循环遍历的对象# 数字类型不可迭代:# name="wangyifei"# for i in ...

  3. 迭代器生成器可迭代对象_使用迭代器时如何避免ConcurrentModificationException

    迭代器生成器可迭代对象 Java Collection类是快速失败的,这意味着如果在使用迭代器遍历某个线程的同时更改了Collection,则iterator.next()将抛出ConcurrentM ...

  4. 迭代器 生成器 面向过程编程

    迭代器什么是迭代器(iterator)? 器值得某种工具 迭代,指的是更新换代的过程,例如应用程序的版本更新,从1.0编程1.1在变成1.2 迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复 ...

  5. python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】

    python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含 ...

  6. python自动化_day4_迭代器生成器内置函数和匿名函数

    什么是可迭代的 含有__iter__方法的就是可迭代的: python 可迭代对象--Iterable Python中经常使用for来对某个对象进行遍历,此时被遍历的这个对象就是可迭代对象, 像常见的 ...

  7. python学习day13 day14 迭代器 生成器

    迭代器 可迭代的: list dic str set tuple f = open() range() enumerate # 显示列表所拥有的所有方法 print(dir([])) 双下方法:很少直 ...

  8. ES6 | let 关键字 + const关键字 + 箭头函数 + rest参数 + 扩展运算符 ... + Symbol + 迭代器 + 生成器 + 变量的解构赋值 + 模板字符串

    目录 ECMASript 相关介绍 ECMASript 6 新特性 let 关键字 const关键字 变量的解构赋值 模板字符串 简化对象写法 箭头函数 => 参数默认值 rest参数 扩展运算 ...

  9. python基础二 函数 递归 装饰器 迭代器 生成器 内置函数 二分法应用

    函数 迭代器 生成器 拆包和装包 tup=("j1","a1","c1","k1") a,b,c,d=tup print ...

  10. 迭代器/生成器/装饰器 /Json pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

最新文章

  1. 2018HDU多校训练-3-Problem G. Interstellar Travel
  2. Android底层开发之旅—蓝牙系统分析
  3. Redis开发:hash存储自定义Java对象及value的序列化器设置
  4. SUSE Linux系统安全配置十条
  5. 让你的ASP.NET Core应用程序更安全
  6. C#容量超出了最大容量。
  7. python不支持prelu_MTCNN(九)更改python与c代码的PReLU为ReLU
  8. 分治法解决逆序对问题
  9. 已收藏!java面试知识点整理
  10. CF Fox And Two Dots (DFS)
  11. 声道测试音频_功率放大器测试方法
  12. 新增SDK 错误解决办法
  13. 学习总结-《父与子的编程之旅》chapter 9
  14. web前端面试题(十一)之如何解决跨域问题?
  15. 《算法导论》知识点总结
  16. Oracle中动态SQL详解(EXECUTE IMMEDIATE)
  17. 荣耀修改WIFI服务器,数码教程资讯:荣耀路由2S怎么修改wifi的802.11n频宽
  18. python请输入星期几的第一个字母来判断_【Python 实例】面向对象 | 请输入一周中某天的名称的第一个字母来判断以下是星期几,如果第一个字母一样则继续判断第二个字母...
  19. 大厂面试干货:面试官最喜欢pick什么样的候选人
  20. 打印机工作原理和维修

热门文章

  1. OpenCV-图像处理(26、直方图反向投影(Back Projection))
  2. php java转换为字符串格式_php array 转json及java 转换 json数据格式操作示例
  3. python 字符串交集_集合 (Set) | 一山不容二虎的 Python 数据类型
  4. 动态ip地址方案有什么优点和缺点_OA期刊的优点和缺点是什么
  5. javaee7实现websocket_websocket协议,tcp分包与粘包解决
  6. python输出重定向_使用Python子进程重定向标准输出到标准输入...
  7. php物联网github,工欲善其事必先利其器,清点Github上那些优异的PHP项目
  8. 安装blocksci mac出错_你的Mac与Big Sur兼容吗?
  9. 加载elementor时出现问题_Elementor新手教程:怎么使用elementor设计网站页面!
  10. xamarin android 设备,【Xamarin.Android】在Visual Studio中增强设备日志记录