1. 生成器的定义

生成器的本质就是迭代器.python社区生成器和迭代器是一种

2. 生成器和迭代器区别

迭代器:

​ 都是Python给你提供的已经写好的工具或者通过数据转化得来的

生成器:

​ 需要我们自己构建的工具

3. 生成器的产生方式

  • 生成器函数
  • 生成器表达式
  • python给你提供的一些内置函数,返回一个生成器

4. 生成器函数 (***)

迭代器的return换成yield就是生成器,但是这个时候正常执行的结果是一个生成器的地址 (***)

# 生成器格式:***
def func():
print(111)
yield 22
yield 33
ret = func()
print(next(ret)) # 执行一次next返回一个值
print(next(ret))
# 输出结果
111
22
33 # 如果执行的时候再加一个print(next(ret))是会报错的,原因是生成器一个一个地往下执行,而且会记录位置,不走回头路,再加一个找不到值,就会报错.也就是一个yield对应一个next,next超过yield数量,就会报错.(***)

以下为帮助理解

# 讲解方法
def func():
print(111)
yield 22
gent = func()
ret = gent.__next__() # 这里要加一个方法.__next__()
print(ret) def func():
print(111)
yield 22
ret = func()
print(ret) # 正常迭代器如果是这样的形式的话,到这一步是要进行执行的,打印结果先打印111,return 返回22 ,而在生成器中打印的是生成器的地址 如果要执行生成器需加一个方法:
print(next(ret))
# 执行结果
111
22
# 有几个yield就需要有几个print(next(ret)),yield少print多的话就会报错,就是print找不到了

5. 生成器的例题

# 吃包子
def bun():
for i in range(1,2001):
yield f'{i}号包子'
ret = bun() for i in range(200): # 这个相当于执行next(ret)的次数 print(next(ret)) # 输出结果
1号包子
2号包子
3号包子
4号包子4
5号包子
...
200号包子 # 迭代器制作包子是一次性完成,会占用大量的空间,而生成器制作包子,是你需要一个包子我制作一个,非常节省内存 # 优点: 补全内容

6. yield(***)

用途

yield : 对应next给next返回值

只要函数中出现了yield那么他就不是函数,它是生成器函数

7. yield与return的区别(***)

return一般在函数中只设置一个,他的作用是终止函数,并且给函数的执行者返回值。

yield在生成器函数中可设置多个,他并不会终止函数,next会获取对应yield生成的元素。

8. yield from(***)

用途

以直接把可迭代对象中的每一个数据作为生成器的结果进行返回,代替for循环的作用

例题: 这个例题一看就会

def func():
lst = ['卫龙','老冰棍','北冰洋','牛羊配']
yield lst
g = func()
print(g)
print(next(g)) # 输出结果
<generator object func at 0x1095c95e8>
['卫龙', '老冰棍', '北冰洋', '牛羊配']

yield写两个列表同时运行也不会产生交替的效果

def func():
lst1 = ['卫龙','老冰棍','北冰洋','牛羊配']
lst2 = ['馒头','花卷','豆包','大饼']
yield from lst1
yield from lst2 g = func()
for i in g:
print(i) # 输出结果

8. yield和yield from对比(***)

Yield: 对应next给next返回一个值

Yield from: 省代码 提升效率 代替for循环

python之生成器的初识的更多相关文章

  1. python迭代器,生成器,推导式

    可迭代对象 字面意思分析:可以重复的迭代的实实在在的东西. list,dict(keys(),values(),items()),tuple,str,set,range, 文件句柄(待定) 专业角度: ...

  2. python 列表生成器

    python 列表生成器 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 一个循环 在C语言等其他语言中,for循环一般是这样的 ...

  3. python 迭代器 生成器

    迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  4. python中和生成器协程相关的yield from之最详最强解释,一看就懂(四)

    如果认真读过上文的朋友,应该已经明白了yield from实现的底层generator到caller的上传数据通道是什么了.本文重点讲yield from所实现的caller到coroutine的向下 ...

  5. python中和生成器协程相关yield from之最详最强解释,一看就懂(二)

    一. 从列表中yield  语法形式:yield from <可迭代的对象实例> python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在 ...

  6. python中和生成器协程相关的yield之最详最强解释,一看就懂(一)

    yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底 ...

  7. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  8. Python的生成器进阶玩法

    Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...

  9. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...

随机推荐

  1. 无监督学习:Deep Generative Mode(深度生成模型)

    一 前言 1.1 Creation 据说在费曼死后,人们在他生前的黑板上拍到如图画片,在左上角有道:What i cannot create ,I do not understand. Generat ...

  2. ue4 打个log难如狗

    注意: 把log相关两个宏写到类中,并编译后,在输出日志的位置的Categories关键字过滤的位置看不到自己的标签是因为需要先运行一次,输出一些这个标签的log后,这个自定义的标签才会显示在这 原文 ...

  3. 3dmax切割平行线

    1 选择物体(可编辑多边形),选择边 ,然后点击切片平面 2 然后会出现黄色线框 3 移动旋转黄色线框到合适位置,然后点切片 4 结果

  4. 通过node.js读取html页面及其页面中引入的css样式

    Node 是什么? Node 是一个基于Chrome V8 引擎的JavaScript 运行环境. Node 不是一种独立的语言.Node不是 JavaScript 框架, Node是一个除了浏览器之 ...

  5. BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)

    题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...

  6. MyBatis入门Bug集锦X1

  7. python进阶04 装饰器、描述器、常用内置装饰器

    python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...

  8. 2017 Multi-University Training Contest - Team 7 Just do it

    http://acm.hdu.edu.cn/showproblem.php?pid=6129 题意:一次操作就是i从1~n有 A[i]=A[i]^A[i-1]^A[i-2]...^A[1] 那么这样操 ...

  9. 063 Unique Paths II 不同路径 II

    这是“不同路径” 的进阶问题:现在考虑网格中有障碍物.那样将会有多少条不同的路径从左上角到右下角?网格中的障碍物和空位置分别用 1 和 0 来表示.例如,如下所示在 3x3 的网格中有一个障碍物.[  ...

  10. (转)io优化

    原文:http://blog.csdn.net/gzh0222/article/details/9227393 1.系统学习 IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后,瓶颈往往 ...