生成器

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-生成器,迭代器相关推荐

  1. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  2. python基础语法(mooc+小甲鱼)

    文章目录 0.总介绍 编程语言分类:**人生苦短,我学python** 1.数据类型及操作 类型 **整数类型** **浮点数类型:有小数点的数字,即实数** 布尔类型 **复数类型** **字符串* ...

  3. Python基础语法笔记

    文章目录 前言 1.变量.运算符与数据类型 1.1 注释 1.2 运算符 1.3 变量与赋值 1.4 数据类型与转换 1.5 print()函数 2.位运算 2.1 原码.反码和补码 2.2 利用位运 ...

  4. #第3篇分享:python基础语法-磨刀不误砍柴工

    #python基础语法 无论学习什么语言,我们最初都要学习这门语言的基础语法及一些基本定义,下图基本涵盖了python学习所有的基础知识,下面我就详细来说上一说,说的不好您见谅: 1.首先介绍一下数据 ...

  5. 从列表中切片最佳英雄组合,我的选择是亚索和李青——补充python基础语法有关数字类型和列表的知识

    本文继续补充个人对python基础语法的理解,这里主要讲数字类型和列表~ 目前还不算初级程序员把,但是一洗头就掉头发,现在都不敢洗头了~ 数字类型 python中的数字类型:int(整型).float ...

  6. python基础语法--python语言及其应用

    python基础语法 python引言 python python语言是一种高级动态.完全面向对象的语言. python中函数.模块.数字.字符串都是对象. python完全支持继承.重载.派生.多继 ...

  7. Python 基础语法_Python脚本文件结构

    目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...

  8. python基础指令-python基础语法,python 代码命令大全

    python: 1.语法强制缩进 2.区分大小写:iLoop与iloop是两个变量 3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用 4. ...

  9. python基础语法手册-python语法手册

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 常用的也不超过十个,这种相对于更为复杂的html标记语言来说,markd ...

  10. python基础语法手册-python语法大全,python语法手册

    deff(x,y=0,z=0):pass 定义一个有三个参数x,y,z的函数f,参数x是必须要赋值,比如f(1),f(x=1),都是给x赋值1,y,z也是需要赋值,但不是必须的,因为默认值已经在函数里 ...

最新文章

  1. 设Excle的cell中显示一个下拉列表选择框
  2. Python之pandas数据加载、存储
  3. 5.3.4 TCP流量控制
  4. MVC在filter中如何获取控制器名称和Action名称
  5. pythonweb开发-Web | 浅谈用Python进行Web开发
  6. 【IOS 开发】Objective - C 入门 之 数据类型详解
  7. python学习笔记(05)
  8. 记一个自己项目上线的全过程
  9. 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
  10. SharePoint 2010应用开发系列
  11. 不同数据库间的数据访问--dblink
  12. Android开发之选项菜单(optinosMenu)
  13. linux所有文件打包压缩,Linux基础教程:对文件打包压缩
  14. oracle外表日期,三步教会你掌握oracle外表(external table)
  15. UML学习总结(2)——StartUML 各种类图的例子
  16. MySQL5.7收集表统计信息时对该表上增删改查的影响
  17. 所谓伊人,在水一方--------------折射定律
  18. Remoting事件序列一:客户端触发服务器端事件
  19. db2 jdbc驱动参数_db2的jdbc驱动安装及例子
  20. rstudio教程 java_RStudio的使用教程

热门文章

  1. python动态是什么意思_怎么看出自己是Python什么阶段
  2. c++ string replace_「Java学习」String,StringBuffer和StringBuilder的区别
  3. Javascript特效:封装元素动画函数
  4. Javascript特效:电商商品展示放大镜
  5. datatable的查询介绍
  6. sql2005 脚本中给字段写说明
  7. CVPR2018_主干网络系列(3)_SE-Net及其衍生的网络[SE-XX-Net]
  8. 考完试 记录一下复习资料 人工智能原理知识点整理
  9. python使用多线程(二)
  10. 简述this,call,apply,bind之间的关系