Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python中的yield是什么意思

Python中的yield是什么意思

作者头像
Stanley Sun
发布于 2019-09-23 07:06:43
发布于 2019-09-23 07:06:43
8.3K00
代码可运行
举报
运行总次数:0
代码可运行

要理解yield,先理解几个概念

可迭代的(Iterables)

从list中挨个读取item称为迭代, 如下例所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> mylist = [1, 2, 3]
>>> for i in mylist:
...    print(i)
1
2
3

mylist是可迭代的。再来个复杂一点的例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
...    print(i)
0
1
4

生成器(Generators)

生成器是一个迭代子,但是只能迭代一次。因为它们不把数值存储在内存中,而是即时生成它们。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
...    print(i)
0
1
4

与上面的差别是生成器用了(),而不是[]。 不过for循环只能执行一次。执行完之后,mygenerator里面的值就变空了。

Yield

yield关键字很像return,所不同的是,它返回的是一个生成器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> def createGenerator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i*i
...
>>> mygenerator = createGenerator() # 创建一个generator
>>> print(mygenerator) # mygenerator 是一个对象
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)
0
1
8

当你调用这个函数的时候,函数内容并没有执行,而是返回一个生成器对象。然后,你再用for去遍历这个生成器。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python中的yield和return
yield和return的区别与python中的generator和iterables相关,所以要了解其不同,首先要明白产生器和迭代器。
Tim在路上
2020/08/05
1K0
成为Python大牛必须要掌握的高端语法——yield
作者:grisse 链接: https://segmentfault.com/a/1190000017405045
1480
2019/07/15
5040
迭代器和生成器
迭代器和生成器 所有你可以用在for...in...语句中的都是可迭代的:比如lists,strings,files...因为这些可迭代的对象你可以随意的读取所以非常方便易用,但是你必须把它们的值放到内存里,当它们有很多值时就会消耗太多的内存. 生成器也是迭代器的一种,但是你只能迭代它们一次.原因很简单,因为它们不是全部存在内存里,它们只在要调用的时候在内存里生成。生成器使用的重点关键字是 Yield def createGenerator(): mylist = range(3)
程序员同行者
2018/07/02
3680
python进阶用法3 【优化毫不起眼的
这篇博客提及三个关于python循环的优化细节,如有其他一些优化的方案,欢迎留言分享~QWQ
py3study
2020/01/07
3350
惰性求值和yield-Python
惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值。
百川AI
2021/10/19
9140
python yield
为了精通 yield ,你必须要理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,这有点蹊跷不是吗。
py3study
2020/01/03
7350
理解Python中的yield
1、通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。
周小董
2019/03/25
7620
理解Python中的yield
Python FAQ(常见问题解答)(1)
声明:转载需署名出处,严禁用于商业用途! 1、python的帮助: help(str) 可以查看str字符类的帮助信息。 2、python没有括号来表明语句块,而是采用缩进来表示这一语法。 3、一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\\1'或r'\1'。 4、for循环的区间是半开区间:range(1,5,2)给出[1,3]。记住,range 向上延伸到第二个数,即它不包含第二个数。 5、print语句的结尾使用了一个 逗号 来消除每个print语
用户1177713
2018/02/24
3.1K0
弄懂这 6 个问题,拿下 Python 生成器!
施工计划第17篇。公众号真正做技术写作的本来就少,能够从一而终,始终坚持下去的,更是凤毛麟角,我会向我心中那些正真在做技术分享的前辈们学习,争取早日加入这类俱乐部。
double
2020/10/23
6080
弄懂这 6 个问题,拿下 Python 生成器!
python yield函数深入浅出理解
首先关于生成器的那些事: 1.通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。 它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 *它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。 2.生成器是可以迭代的,但只可以读取它一次。因为用的时候才生成。比如 mygenerator = (x*
学到老
2018/03/19
1.4K0
python yield函数深入浅出理解
日拱一卒,伯克利教你学Python,一次弄懂迭代器生成器
我们继续伯克利CS61A公开课之旅,这一次我们讨论的是lab11,也就是第11次实验课。
TechFlow-承志
2022/09/21
4940
日拱一卒,伯克利教你学Python,一次弄懂迭代器生成器
独家 | 什么是Python的迭代器和生成器?(附代码)
本文介绍了Python中的生成器和迭代器。在处理大量数据时,计算机内存可能不足,我们可以通过生成器和迭代器来解决该问题。
数据派THU
2020/06/19
1.3K0
人人都能看懂的「迭代器、生成器」入门指南!
今天我们将讨论能在很多教程中看到,但又常常搞的头晕转向的迭代器、生成器,以及让新手经常困惑的yield。
刘早起
2022/09/21
3880
Python 生成器函数
Python 提供了一个生成器来创建自己的迭代器函数。 生成器是一种特殊类型的函数,它不返回单个值,而是返回一个包含一系列值的迭代器对象。 在生成器函数中,使用yield语句,而不是返回语句。 下面是一个简单的生成器函数。
很酷的站长
2023/08/15
2950
Python 生成器函数
Python yield关键字 和 Generator(生成器)
Generators functions allow you to declare a function that behaves like an iterator, i.e. it can be used in a for loop. https://wiki.python.org/moin/Generators 翻译:生成器功能允许你声明一个行为类似于迭代器的函数,它也能用在for循环中。 Python Yield关键字 yield关键字类似于return,不同之处在于Python的
Steve Wang
2018/02/05
1.1K0
Python中的yield关键字是什么?
在Python中,yield是一个重要的关键字,它与生成器(Generator)和懒惰计算(Lazy Evaluation)密切相关。
闻说社
2024/07/08
2520
Python中的yield关键字是什么?
python迭代器与生成器小结
这个东西输出可以脑补一下, 结果是[20,21,22,23], 而不是[10, 11, 12, 13]。 当时纠结了半天,一直没搞懂,后来齐老师稍微指点了一下, 突然想明白了--真够笨的,唉。。好了--正好趁机会稍微小结一下python里面的生成器。
py3study
2020/01/03
3990
《Python分布式计算》第2章 异步编程 (Distributed Computing with Python)协程一个异步实例总结
从本章开始,终于开始写代码了!本书中所有的代码都适用于Python 3.5及以上版本。当模块、语句或语法结构不适用于以前的版本时(比如Python 2.7),会在本章中指出。进行一些修改,本书代码也可以运行在Python 2.x版本上。 先回顾下上一章的知识。我们已经学到,改变算法的结构可以让其运行在本地计算机,或运行在集群上。即使是在一台计算机上运行,我们也可以使用多线程或多进程,让子程序运行在多个CPU上。 现在暂时不考虑多CPU,先看一下单线程/进程。与传统的同步编程相比,异步编程或非阻塞编程,可以使
SeanCheney
2018/04/24
1.5K0
《Python分布式计算》第2章 异步编程 (Distributed Computing with Python)协程一个异步实例总结
从yield 到yield from再到python协程
yield 是在:PEP 255 -- Simple Generators 这个pep引入的
coders
2018/12/24
1K0
python中yield\\send好处
生成器yield\send 生成器的好处:缓解内存压力 # -*-coding:utf-8 -*- __date__ = '2018/3/9 ' __author__ = 'xiaojiaxin' __file_name__ = '生成器' # a1=[x for x in range(5000000000)] #将range(5000000000)全部扔进内存,速度非常慢,甚至会死机 a=(x for x in range(5)) print(a) # <generator object <genexp
IT架构圈
2018/06/01
8120
相关推荐
python中的yield和return
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验