python 基础(五) 迭代器与生成器
2024-10-16 08:00:25
迭代器和生成器
迭代器 iterator
(1) 迭代对象:
可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象
可以直接作用于for循环的数据类型为:
列表,字典,集合,元组,字符串...
generator 带yield的函数
实例 判断哪些是可迭代对象
from collections import Iterable
print(isinstance('',Iterable)) #True
print(isinstance(1,Iterable)) #False
print(isinstance(True,Iterable)) #False
print(isinstance([],Iterable)) #True
print(isinstance(1.1,Iterable)) #False
print(isinstance((),Iterable)) #True
print(isinstance(set(),Iterable)) #True
(2) 迭代器 iterator
是快速访问集合的一种方式
迭代器提供了俩个方法 iter() 和 next()
迭代器在访问的时候 只能前进 不能后退
当数据被访问完以后 再次访问 则会抛出 StopIteration的错误
迭代器的前提 必须是一个可迭代对象
称为迭代器以后 增加了next方法进行取值 并且依然支持for循环
判断当前是否属于迭代器:
from collections import Iterator
print(isinstance([],Iterator)) #False
print(isinstance(iter([]),Iterator)) #True
生成器 generator
带有yield 的函数
使用列表推导式 外层使用小括号 称之为生成器
生成器 也能够使用 迭代器的 next方法 生成器也实现了迭代器的功能
(1) 使用列表推导式生成的生成器
可以使用next 并且 可以作用于for循环
myList = (x for x in range(100000000000)) #generator
用一个生产一个 并不是一次性的全部生产出来 节约资源
from collections import Iterator,Generator
myList = (x for x in range(100000000000)) #generator
myList = (x for x in range(3)) #generator
print(isinstance(myList,Iterator)) #True
print(isinstance(myList,Generator)) #True
(2) 带yield的函数
yield
next()
生成器的拆分 (后期的协程 就是基于当前的生成器 只是可以之间通过send方法进行通信 节省资源的开销 因为是单进程单线程)
#生成器拆分
def func():
print(1)
yield 'a'
print(2)
yield 'b'
f = func()
# print(f)
print(next(f))
print(next(f))
print(next(f))
每次调用next 会执行到下一个yield 位置并停止 将yield的值 进行返回
最新文章
- optparse
- Linux中常用操作命令
- 学习swift开源项目
- 给Android程序员的六个建议
- ThinkPHP技巧
- UVA 10341 二分搜索
- hasLayout与Block formatting contexts的学习(下)
- UIView animateWithDuration 使用详解
- 打造基于Clang LibTooling的iOS自动打点系统CLAS(一)
- Java项目中使用Redis缓存案例
- RabbitMQ安装使用详解
- C# WebService创建与使用
- 论文阅读(Weilin Huang——【ECCV2016】Detecting Text in Natural Image with Connectionist Text Proposal Network)
- ubuntu系统安装mysql(deb-bundle包)
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
- db2 表空间容量
- Spring Boot中application.yml与bootstrap.yml的区别(转载)
- P2607 [ZJOI2008]骑士
- [正经分析] DAG上dp两种做法的区别——拓扑序与SPFA
- 一道money计算题引发的思考