python生成器

python高级特性

首先, 所有的生成器都是迭代器, 因为生成器完全实现了迭代器的接口。

在python中, 有两种不同的方式提供生成器:

1. 生成器表达式

2. 生成器函数

什么是生成器?

生成器是可以迭代的,但是你 只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据:

>>>mygenerator=(x*xforxinrange(3))

>>>foriinmygenerator:

...print(i)

0

1

4

看起来除了把 [] 换成 () 外没什么不同。但是,你不可以再次使用 for i in mygenerator , 因为生成器只能被迭代一次:先计算出0,然后继续计算1,然后计算4,一个跟一个的…

生成器表达式

虽然,可以使用列表推导来初始化序列类型,但是当列表长度很大的时候, 生成器表达式更适合。

因为列表推导式返回的是一个序列对象, 而生成器表达式返回的是一个生成器对象,正如在生成器中描述的那样,生成器对内存更友好。

详细来说, 生成器表达式背后遵守了迭代器协议,可以逐个地产出元素,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。前面那种方式显然能够节

省内存。

语法

将列表推导中的[]改为()就是生成器表达式

(exprforiter_variniterableifcond_expr)如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围起来。如

tuple(ord(value)forvalueinvalues)如果函数调用中除了生成器表达式还有其他参数,则需要加上()

yield - 生成器函数

yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器。此时,这个函数就称为生成器函数。

>>>defcreateGenerator():

...mylist=range(3)

...foriinmylist:

...yieldi*i

...

>>>mygenerator=createGenerator()# create a generator

>>>print(mygenerator)# mygenerator is an object!

>>>foriinmygenerator:

...print(i)

0

1

4

这个例子没什么用途,但是它让你知道,这个函数会返回一大批你只需要读一次的值.

为了精通 yield ,你必须要理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,这有点蹊跷不是吗。

那么,函数内的代码什么时候执行呢?当你使用for进行迭代的时候.

现在到了关键点了!

第一次迭代中你的函数会执行,从开始到达 yield 关键字,然后返回 yield 后的值作为第一次迭代的返回值. 然后,每次执行这个函数都会继续执行你在函数内部定义的那个循环的下一次,再返回那个值,直到没有可以返回的。

如果生成器内部没有定义 yield 关键字,那么这个生成器被认为成空的。这种情况可能因为是循环进行没了,或者是没有满足 if/else 条件。

深入生成器函数语法上与函数类似: 生成器函数与常规函数的差别在于: 生成器使用yield返回一个值,而常规函数使用return返回一个值。

自动实现迭代器协议。

状态挂起: yield语句会挂起该生成器函数的状态,保留足够的信息, 以便之后从它离开的地方继续执行。

使用生成器的注意事项生成器只能遍历一次

自动论文生成器 python_python生成器相关推荐

  1. 自动论文生成器 python_Python生成器常见问题及解决方案

    在Python中,生成器和函数很像,都是在运行的过程中才会去确定各种变量的值,所以在很多情况下,会导致各种各样的问题. def generator_test1(): # 0...9 generator ...

  2. python小说自动生成器_python- generator生成器

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

  3. python生成器函数_【python】生成器和生成器函数

    1.生成器函数: 普通函数: def func(): print("周杰伦") return "昆凌" func() #执行func()函数,"周杰伦 ...

  4. 生成器和生成器表达式

    一 . 生成器 生成器就是迭代器 生成器的特点和迭代器一样. 1.省内存 2.惰性机制 3.只能向前 在python中有三种方式获取生成器 1.通过生成器函数 2.通过各种推导式来实现生成器 3.通过 ...

  5. 用python编写图片生成器_python生成器

    生成器 一.生成器 定义: 生成器与迭代器看成是一种.生成器的本质就是迭代器. 唯一的区别: 生成器是自己用python写代码构建的数据结构.迭代器都是(系统)提供的,或者转化而来的 获取生成器的三种 ...

  6. python生成器next_Python生成器生成next,python,yieldnext

    在实践keras网络模型的时候,发现keras fit_generator与flow_from_directory函数均有关于生成器的频繁使用:因此在本文中对其进行总结. Python 之所以要提供这 ...

  7. 初识生成器与生成器表达式 Day12

    一.生成器 1,生成器基本概念 生成器的实质是迭代器 迭代器:Iterator 内部同时包含了__iter__()和__next__()函数 可迭代对象:Iterable 内部包含__iter__() ...

  8. python生成器表达式_python 生成器和生成器表达式

    1.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...

  9. Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解

    文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...

最新文章

  1. iOS宏定义的使用与规范
  2. 中国7位学者当选!又一院士名单公布
  3. SAP MM 外部采购流程里的Advanced Return Management
  4. ahp层次分析法matlab代码_Matlab数据分析实战,基于AHP高校食堂满意度调查分析
  5. csv中包含多余换行符_Python3爬虫之猫眼电影TOP100(requests、lxml、Xpath、CSV)
  6. 前端学习(3158):react-hello-react之一个简单的helloworld
  7. Java的static关键字用法及原理
  8. C++11 thread使用
  9. 为什么我得到javafx.fxml.LoadException甚至fxml文件的路径都是正确的
  10. python程序如何执行死刑_哪些Python库让你相见恨晚?
  11. 寻找影响免疫浸润细胞的基因(一)
  12. 成为优秀交互设计师的六个必备技能
  13. 智能优化算法:共生生物搜索算法 - 附代码
  14. a标签href=”javascript;void(0)
  15. bootstrap的学习-基础样式和排版一
  16. 女神节送什么给礼物女友好,2022女神节送礼合集
  17. windows一键睡眠,不是休眠!
  18. abc android软件,学习ABC Learn ABC软件
  19. 知名搜索引擎网站收录提交入口
  20. Hive管理之Web界面和远程管理

热门文章

  1. 神经网络不收敛的查缺补漏
  2. 数据结构基础(5) --归并排序
  3. swift 点击响应视图之外的地方
  4. php实现数值的整数次方
  5. 如何在VS2013中进行Boost单元测试
  6. js中==和===的区别
  7. C#.NET根据数据库中0,1返回对应代表含义“男”,“女”等问题
  8. error_logs
  9. php获取数据库的表名和字段名
  10. 20110128 学习记录:Datalist中的item项不自动换行而只用空格隔开