Python基础语法-04-生成器,迭代器
生成器
1.列表生成式
在讲生成器之前,先说一个和生成器作用很类似的东西,列表生成式,其格式为:
[ X for X in Y]
X为一个元素,Y为一个范围,列表生成式将Y中的元素一个一个的取出来,组成一个列表
使用命令行打开Python3
定义一个列表生成式L,并将其输出
>> L = [ x*2 for x in range(5)]
>> L
Out: [0, 2, 4, 6, 8]
2.生成器简介
在Python中,通过列表生成式,我们可以直接创建⼀个列表,但列表容量是有限的,而且创建⼀个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的列表,从而节省大量的空间
在Python中,这种⼀边循环创建元素⼀边计算的机制,称为生成器:generator
3.使用表达式的方式创建生成器
表达式生成器的格式和列表生成式的格式很相似,不过生成器使用小括号:
( X for X in Y )
生成器每次只生成一个元素,取出其中的元素,可以通过next方法
>> G = ( x*2 for x in range(2))
>> next(G)
Out: 0
>> next(G)
Out: 1
>> next(G)
Out:
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-24-380e167d6934> in <module>()
----> 1 next(G)
StopIteration:
生成器保存的是算法,每次调⽤ next(G) ,就计算出 G 的下⼀个元素的值,直到计算到最后⼀个元素,没有更多的元素时,抛出 StopIteration 的异常
使用next方法取元素太麻烦,也可以使用for循环
>> G = ( x*2 for x in range(2))
>> for x in G:print(x)
Out: 02
>>
4.使用函数方式创建生成器
generator非常强⼤。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,就需要用函数来实现生成器,实现时还必须要到yield关键字
例如斐波那契数列的生成算法,需要使用一个函数来实现
def fib(times):n = 0a,b = 0,1while n<times:print(b)a,b = b,a+bn+=1return 'done'fib(5)
上面的函数直接将元素输出了,和列表生成式生成结果的方式一样。如果想将上边函数改成生成器的生成模式,还需要用到关键字yield
def fib(times):n = 0a,b = 0,1while n<times:yield ba,b = b,a+bn+=1return 'done'F = fib(5)
print(next(F))
print(next(F))
print(next(F))
迭代器
迭代是访问集合元素的⼀种方式。迭代器是⼀个可以记住遍历位置的对象。
迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束,只能往前不能后退
1.可迭代对象
能直接使用for循环进行迭代的数据类型有以下几种:
1)集合数据类型
如 list 、 tuple 、 dict 、 set 、 str 等
2)生成器
包括表达式类型的生成器和函数类型的生成器
这些可以直接使用for循环的对象统称为可迭代对象–Iterable
2.能否迭代的判断
使⽤isinstance()
函数判断⼀个对象是否是Iterable 对象
#使用isinstance()函数前要先导入模块
from collections import Iterable
#调用isinstance()函数
print(isinstance(‘abc’, Iterable))
print(isinstance((x for x in range(10)), Iterable))
运行结果:
3.iter()
函数
可以使用for循环的对象都是Iterable类型;可以使用next()函数的对象都是Iterator类型,Iterator类型是Iterable类型得一部分
可以使用iter()
函数将一个Iterable对象转化为Iterator对象
#运行结果为true
isinstance(iter('abc'), Iterator)
Python基础语法-04-生成器,迭代器相关推荐
- Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化
一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...
- python基础语法(mooc+小甲鱼)
文章目录 0.总介绍 编程语言分类:**人生苦短,我学python** 1.数据类型及操作 类型 **整数类型** **浮点数类型:有小数点的数字,即实数** 布尔类型 **复数类型** **字符串* ...
- Python基础语法笔记
文章目录 前言 1.变量.运算符与数据类型 1.1 注释 1.2 运算符 1.3 变量与赋值 1.4 数据类型与转换 1.5 print()函数 2.位运算 2.1 原码.反码和补码 2.2 利用位运 ...
- #第3篇分享:python基础语法-磨刀不误砍柴工
#python基础语法 无论学习什么语言,我们最初都要学习这门语言的基础语法及一些基本定义,下图基本涵盖了python学习所有的基础知识,下面我就详细来说上一说,说的不好您见谅: 1.首先介绍一下数据 ...
- 从列表中切片最佳英雄组合,我的选择是亚索和李青——补充python基础语法有关数字类型和列表的知识
本文继续补充个人对python基础语法的理解,这里主要讲数字类型和列表~ 目前还不算初级程序员把,但是一洗头就掉头发,现在都不敢洗头了~ 数字类型 python中的数字类型:int(整型).float ...
- python基础语法--python语言及其应用
python基础语法 python引言 python python语言是一种高级动态.完全面向对象的语言. python中函数.模块.数字.字符串都是对象. python完全支持继承.重载.派生.多继 ...
- Python 基础语法_Python脚本文件结构
目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...
- python基础指令-python基础语法,python 代码命令大全
python: 1.语法强制缩进 2.区分大小写:iLoop与iloop是两个变量 3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用 4. ...
- python基础语法手册-python语法手册
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 常用的也不超过十个,这种相对于更为复杂的html标记语言来说,markd ...
- python基础语法手册-python语法大全,python语法手册
deff(x,y=0,z=0):pass 定义一个有三个参数x,y,z的函数f,参数x是必须要赋值,比如f(1),f(x=1),都是给x赋值1,y,z也是需要赋值,但不是必须的,因为默认值已经在函数里 ...
最新文章
- 设Excle的cell中显示一个下拉列表选择框
- Python之pandas数据加载、存储
- 5.3.4 TCP流量控制
- MVC在filter中如何获取控制器名称和Action名称
- pythonweb开发-Web | 浅谈用Python进行Web开发
- 【IOS 开发】Objective - C 入门 之 数据类型详解
- python学习笔记(05)
- 记一个自己项目上线的全过程
- 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
- SharePoint 2010应用开发系列
- 不同数据库间的数据访问--dblink
- Android开发之选项菜单(optinosMenu)
- linux所有文件打包压缩,Linux基础教程:对文件打包压缩
- oracle外表日期,三步教会你掌握oracle外表(external table)
- UML学习总结(2)——StartUML 各种类图的例子
- MySQL5.7收集表统计信息时对该表上增删改查的影响
- 所谓伊人,在水一方--------------折射定律
- Remoting事件序列一:客户端触发服务器端事件
- db2 jdbc驱动参数_db2的jdbc驱动安装及例子
- rstudio教程 java_RStudio的使用教程
热门文章
- python动态是什么意思_怎么看出自己是Python什么阶段
- c++ string replace_「Java学习」String,StringBuffer和StringBuilder的区别
- Javascript特效:封装元素动画函数
- Javascript特效:电商商品展示放大镜
- datatable的查询介绍
- sql2005 脚本中给字段写说明
- CVPR2018_主干网络系列(3)_SE-Net及其衍生的网络[SE-XX-Net]
- 考完试 记录一下复习资料 人工智能原理知识点整理
- python使用多线程(二)
- 简述this,call,apply,bind之间的关系