Python之路----迭代器与生成器
一、迭代器
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之路----迭代器与生成器相关推荐
- python之路---迭代器和生成器
阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...
- python之路——迭代器和生成器
楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思 ...
- python之路——迭代器与生成器
要了解for循环是怎么回事儿,咱们还是要从代码的角度出发. 首先,我们对一个列表进行for循环. for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种 ...
- python学习-38迭代器和生成器
迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...
- [转载] Python 学习笔记 迭代器和生成器
参考链接: Python中的迭代器函数2(islice(),starmap(),tee()..) 本文链接地址 http://quqiuzhu.com/2016/python-iterator-and ...
- Python中的迭代器和生成器
Python中的迭代器是非常实用的,但是迭代器只能应用在类序列对象上,比如列表.元组和字典.除非生成迭代器的类,否则无法在非类序列对象上调用next()方法. 自己可以定义迭代器的类,只要满足: 1. ...
- 【Python】Python中的迭代器和生成器
迭代器和生成器在很多编程语言中都会以不同形式的存在,在实际编程中经常会被用到.下面我们来了解一下什么是迭代. 1 迭代 了解Java的AIAS行者(AI行者是我B站粉丝勋章名称)应该都会知道,在Jav ...
- Python面试:迭代器和生成器
讲讲python的迭代器和生成器 参考:菜鸟教程 如何更好地理解Python迭代器和生成器? 区别:生成器是一种特殊的迭代器,只能迭代一次 迭代器 迭代器是python中的一个强大功能,用于访问集合元 ...
- 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())
文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...
最新文章
- Node.js 11.12.0 发布,服务器端的 JavaScript 运行环境
- zynq交叉编译环境
- 经典面试题:给两个序列如何构造一棵二叉树
- Scala集合与Java集合的对比
- WPF中的Pack URI
- 怎么在linux上修改mysql端口映射_如何在Linux中更改默认的MySQL / MariaDB端口
- 卖肾换来一部iPhone后生活不能自理,那手机电商平台现在卖10块钱!
- java thread类_Java多线程原理及Thread类详解
- 开源私有云盘python_用Seafile不花钱搭建高安全性局域网私有云盘
- 采用C#泛型实现状态(State)模式
- kotlin学习之高阶函数及常用基本高阶函数
- 【JavaEE】网络基本概念与协议分层手术刀剖析
- 云服务器Linux 安装SVN
- 怎样分析数据致提高产出?(三)
- 疫情严峻,为什么VR全景能逆生长?
- IOS版aplayer使用教程_Y Y的使用教程视频版/图片版(手机版。电脑版。楚恒上课必用软件)...
- cs231n学习笔记——图像分类
- ural1297 . Palindrome
- AE基础教程第一阶段——12轨道遮罩
- iOS开发中常用到的第三方库