python中yield关键字怎么理解?
admin
2023-07-19 12:02:15
0

本文简短翻译自链接 StackOverflow。
在理解yield之前,你必须先知道iterable(迭代器)和generator(生成器)。

iterable

当你创建一个list,你能一个接一个读取list的每一项。能一个接一个读取每一项的就是迭代器。

>>> mylist = [1, 2, 3]
>>> for i in mylist:
...    print(i)
1
2
3

mylist是一个iterable,当你用列表推导式生成一个列表,也是iterable

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
...    print(i)
0
1
4

一切能用for.......in.......的都是迭代器,例如lists,strings,files。。。

generator

generator是一种只能迭代一次的iterable。生成器不会再内存中储存值,它只会在程序运行的时候生成值。

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
...    print(i)
0
1
4

它和上面的不同仅仅是把`[]替换成()。生成器只能使用一次。

yield

yield和return的用法相似,只是,使用yield函数将返回一个生成器。

>>> def createGenerator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!

>>> for i in mygenerator:
...     print(i)
0
1
4

当你需要使用大量只需要使用一次的数据时,你就可以使用yield。
你需要知道的时,当你调用createGenerator()这个函数时,函数里面的代码并不会运行,函数会返回一个生成器对象。
每次对生成器对象用for,函数里面的代码都会运行一次。
以下是理解的关键部分:

for的每次循环,函数里面的代码都会执行,直到遇到yield,然后把值返回。当循环到头了或者函数不满足"if...else"条件时,生成器为空。

相关内容

热门资讯

伊俄外长通电话讨论美伊谅解备忘... 新华社德黑兰6月17日电 据伊朗伊斯兰共和国广播电视台17日报道,伊朗外交部长阿拉格齐与俄罗斯外交部...
1200万名画被680万拍下,... 据上游新闻报道,河北河间市的丁先生称被掮客诸某操作,在一场拍卖中,以680万元拍下自己保底价1200...
两部门紧急预拨1亿元,支持6省... 近期,江南南部至华南一带出现持续强降雨过程,“两广”地区遭遇今年“龙舟水”最强降雨过程,造成严重洪涝...
华为取得光伏逆变器专利,可改善... 国家知识产权局信息显示,华为技术有限公司取得一项名为“一种光伏逆变器”的专利,授权公告号CN2243...
普定县穿洞街道靛山村:水稻病虫... 近日,普定县穿洞街道靛山村开展水稻病虫害统防统治作业,通过无人机飞防和人工补防相结合,抢抓病虫害防治...
谷歌Chromebook迎来上... 来源:市场资讯 (来源:超能网) 第一代Chromebook产品是在2011年5月11日的谷歌I/O...
大疆狙击影石 文 | 象先志 B站头部影视大V最近那期Pocket 4P的评测视频,弹幕里却飘满了四个字——感谢...
Adobe创意云全面更新:AI... Adobe本周正式推出新一批Creative Cloud重大更新,在Photoshop、Lightr...
“窥探训练情况”?韩媒:韩国队... 【环球网报道 记者 姜蔼玲】据韩国《朝鲜日报》等媒体17日报道,韩国队备战与墨西哥队比赛的赛前训练期...
黄岩岛科研平台工作画面公开,调... 【环球时报-环球网 报道 记者 樊巍 孙朗辰】中方科研机构近期在黄岩岛开展的科学考察活动引发各界关注...