python 基础(五) 迭代器与生成器
迭代器和生成器
迭代器 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的值 进行返回
python 基础(五) 迭代器与生成器的更多相关文章
- python基础8 -----迭代器和生成器
迭代器和生成器 一.迭代器 1.迭代器协议指的是对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2. ...
- 【Python基础】迭代器、生成器
迭代器和生成器 迭代器 一 .迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单 ...
- Python基础之迭代器和生成器
阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...
- 1.17 Python基础知识 - 迭代器和生成器初识
可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...
- Python高手之路【九】python基础之迭代器与生成器
迭代器与生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...
- python基础之迭代器、生成器、装饰器
一.列表生成式 a = [0,1,2,3,4,5,6,7,8,9] b = [] for i in a: b.append(i+1) print(b) a = b print(a) --------- ...
- Python基础之迭代器、生成器
一.迭代器: 1.迭代:每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值.例如:循环获取容器中的元素. 2.可迭代对象(iterable): 1)定义:具有__ite ...
- python基础之迭代器与生成器
一.什么是迭代器: 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器是一个可以记住遍历的位置的对象. 迭代器的 ...
- 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范
1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...
随机推荐
- Centos查看端口占用情况
Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令: lsof -i tcp:80 列出所有端口 netstat -ntlp 结束进程: kill 进程代码
- 利用AutoLayout适配滚动视图和表视图
1.新增一个contentView,设置为与滑动视图的父视图等高等宽. 2.利用代码 if(_MyTestTableView.frame.size.height != _MyTestTableView ...
- Codeforces Round #364 (Div. 1)(vp) 没什么题解就留坑待填
我就做了前两题,第一题第一次vp就把我搞自闭跑路了,第二题第二次又把我搞自闭了 A. As Fast As Possible 细节题 #include<cstdio> #include&l ...
- HDU5015 233 Matrix —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-5015 233 Matrix Time Limit: 10000/5000 MS (Java/Others) Memor ...
- Ansible 动态获取主机列表
参考文献: http://www.linuxidc.com/Linux/2016-12/138111.htm 附加 这个 include_vars 变量,可以 动态分别环境或者其他条件- hosts: ...
- PHP生成一个不重复随机数组的封装方法
<?php /** array unique_rand( int $min, int $max, int $num )* 生成一定数量的不重复随机数* $min 和 $max: 指定随机数的范围 ...
- Swing项目编译成exe,并且打包成安装文件(二)
前面我们讲到了将Swing项目编译成双击可执行的文件exe,这篇我就教大家怎么把exe打包成需要在电脑安装的那种,首先需要一个工具,Inno Setup 编译器, 下载地址,我这个是汉化版的,双击打开 ...
- Dom4J 解析xml ,类查询
/** * 从XML文件比对,传入provinceId 返回 provinceShortName * @param provinceid * @return */ public static Stri ...
- [SHOI 2017] 组合数问题
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4870 [算法] 回顾组合数的定义 : C(N , M)表示将N个小球放入M个盒子里的 ...
- C++之输入输出流和文件传输流
1.流的控制 iomanip 在使用格式化I/O时应包含此头文件. stdiostream 用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类 ...