一、迭代器

L=[1,,2,3,4,5,]取值:索引、循环for循环for的取值:list列表 dic字典 str字符串 tuple元组 set f=open()句柄 range() enumerate枚举for i in L:

告诉我列表所拥有的所有方法

print(dir[])

判断某一数据类型是否有__iter__方法(是否可迭代)

print('__iter__' in dir(int))
print('__iter__' in dir(bool))
print('__iter__' in dir(list))
print('__iter__' in dir(dict))
print('__iter__' in dir(set))
print('__iter__' in dir(tuple))
print('__iter__' in dir(enumerate([])))
print('__iter__' in dir(range(1)))    

只要能被for循环的数据类型,都有_iter_方法

print([].__iter__())

一个列表执行了__iter__()之后的返回值就是一个迭代器

print(dir([]))
print(dir([].__iter__()))
print(set(dir([].__iter__())) - set(dir([])))
print([1,'a','bbb'].__iter__().__length_hint__())  #元素个数
l = [1,2,3]
iterator = l.__iter__()
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__())

迭代器的概念:
  内部含有_next_方法和_iter_方法的就是迭代器

可迭代协议:只要含有_iter_方法的就是可迭代的
迭代器协议:内部含有_next_方法和_iter_方法的就是迭代器

可以被for循环的都是可迭代的

可迭代的内部都有_iter_方法

Iterable 可迭代的_iter_--->只要含有_iter_方法的,都是可迭代的,都可以被for循环
[]._iter_() 迭代器_next_--->通过next方法就可以从迭代器一个一个取值    

for循环其实就是在使用迭代器

iterator可迭代对象
直接给你内存地址

关于for循环

只有是可迭代对象的时候,才能用for循环
当我们遇到一个新的变量,不能确定能不能循环的时候,判断他是否可迭代
print(_iter _ in dir([]))
print(_iter _ in dir(int))

迭代器的好处:

1.从容器类型中一个一个的取值,会把所有的值取到。
2.可以节省内存空间
3.迭代器不会在内存中再占用一大块内存,而是随着循环,每次生成一个,每次next,每次给我一个
4.方便使用,且每个迭代器只能全部取一次

二、生成器:----迭代器
  生成器函数:----本质上是自己写的函数

生成器函数:只要含有yield关键字的函数都是生成器函数
      yield只能写在函数内部,不能和return共用

def generator():print(1)yield 'a'ret = generator()
print(ret)

生成器函数

生成器函数的特点:

1.调用函数的之后函数不执行,返回一个生成器
def generator():print(1)return 'a'ret = generator()
print(ret)

2.每调用一次__next__方法会取到一个值

def generator():print(1)yield 'a'print(2)yield 'b'yield 'c'g = generator()
ret = g.__next__()
print(ret)
ret = g.__next__()
print(ret)
ret = g.__next__()
print(ret)

__next__方法

3.直到取完最后一个,在执行next会报错

打印2000000000个哇哈哈

def wahaha():for i in range(2000000):yield '娃哈哈%s' % i

生成器函数

g = wahaha()

调用生成器函数得到一个生成器

print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())

每调用一次__next__方法会取到一个值

g = wahaha()
count = 0
for i in g:count +=1print(i)if count > 50:break

用for循环取值

从生成器中取值的几个方法

    1.每调用一次__next__方法会取到一个值2.用for循环批量取值3.数据类型的强制转换

监听文件输入例子

def tail(filename):f = open(filename, encoding='utf-8')while True:line = f.readline()if line.strip():yield line.strip()g = tail('file')
for i in g:if 'python' in i:print('***', i)

文件监听,特定字符打印

转载于:https://www.cnblogs.com/TheLand/p/8183804.html

Python之路----迭代器与生成器相关推荐

  1. python之路---迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...

  2. python之路——迭代器和生成器

    楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思 ...

  3. python之路——迭代器与生成器

    要了解for循环是怎么回事儿,咱们还是要从代码的角度出发. 首先,我们对一个列表进行for循环. for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种 ...

  4. python学习-38迭代器和生成器

    迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...

  5. [转载] Python 学习笔记 迭代器和生成器

    参考链接: Python中的迭代器函数2(islice(),starmap(),tee()..) 本文链接地址 http://quqiuzhu.com/2016/python-iterator-and ...

  6. Python中的迭代器和生成器

    Python中的迭代器是非常实用的,但是迭代器只能应用在类序列对象上,比如列表.元组和字典.除非生成迭代器的类,否则无法在非类序列对象上调用next()方法. 自己可以定义迭代器的类,只要满足: 1. ...

  7. 【Python】Python中的迭代器和生成器

    迭代器和生成器在很多编程语言中都会以不同形式的存在,在实际编程中经常会被用到.下面我们来了解一下什么是迭代. 1 迭代 了解Java的AIAS行者(AI行者是我B站粉丝勋章名称)应该都会知道,在Jav ...

  8. Python面试:迭代器和生成器

    讲讲python的迭代器和生成器 参考:菜鸟教程 如何更好地理解Python迭代器和生成器? 区别:生成器是一种特殊的迭代器,只能迭代一次 迭代器 迭代器是python中的一个强大功能,用于访问集合元 ...

  9. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())

    文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...

最新文章

  1. Node.js 11.12.0 发布,服务器端的 JavaScript 运行环境
  2. zynq交叉编译环境
  3. 经典面试题:给两个序列如何构造一棵二叉树
  4. Scala集合与Java集合的对比
  5. WPF中的Pack URI
  6. 怎么在linux上修改mysql端口映射_如何在Linux中更改默认的MySQL / MariaDB端口
  7. 卖肾换来一部iPhone后生活不能自理,那手机电商平台现在卖10块钱!
  8. java thread类_Java多线程原理及Thread类详解
  9. 开源私有云盘python_用Seafile不花钱搭建高安全性局域网私有云盘
  10. 采用C#泛型实现状态(State)模式
  11. kotlin学习之高阶函数及常用基本高阶函数
  12. 【JavaEE】网络基本概念与协议分层手术刀剖析
  13. 云服务器Linux 安装SVN
  14. 怎样分析数据致提高产出?(三)
  15. 疫情严峻,为什么VR全景能逆生长?
  16. IOS版aplayer使用教程_Y Y的使用教程视频版/图片版(手机版。电脑版。楚恒上课必用软件)...
  17. cs231n学习笔记——图像分类
  18. ural1297 . Palindrome
  19. AE基础教程第一阶段——12轨道遮罩
  20. iOS开发中常用到的第三方库

热门文章

  1. SAP RETAIL 事务代码MP38可以为多个物料执行预测
  2. SAP PP 成品工单批次号跟所消耗的半成品批次号一致
  3. 企业的7种工作管理最佳实践
  4. GAN 为什么需要如此多的噪声?
  5. SAP SD基础知识之免费订单
  6. 一套图 搞懂“时间复杂度”
  7. TensorFlow 等“开源陷阱,会掐住中国 AI 企业的命门吗?
  8. 英特尔开源版HE-Transformer,对于隐私数据AI终于上手了!
  9. 你真的了解计算生物学和AI for Science吗?
  10. 为什么数学家、统计学家和机器学习专家会用不同方式解决问题?