栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python yield理解_python中的yield?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python yield理解_python中的yield?

python 3之yield关键字—生成器,最粗暴的解释

首先,正常使用List接收数据,函数normal例子如下:

>>> def normal(n):
...     ls=[]
...     for i in range(n):
...             ls.append(i)
...     return ls

使用for循环遍历List数据,如下:

>>> for i in normal(10):
...     i
...#结果如下:
0
1
2
3
4
5
6
7
8
9

这次加入yield关键字,并去掉return,函数yieldDemo例子如下:

>>> def yieldDemo(n):
...     ls=[]
...     for i in range(n):
...             ls.append(i)
...             yield ls

使用for循环遍历List数据,如下:

>>> for i in yieldDemo(10):
...     i
...#结果如下:
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

从上可知,yield 具有return的功能,但和return 不同的是,return 返回数值后,不可能再次进入函数,并接着进行下一次循环!!!

returnDemo例子如下:

>>> def returnDemo(n):
...     ls=[]
...     for i in range(n):
...             ls.append(i)
...             return ls

使用for循环遍历List数据,如下:

>>> for i in returnDemo(10):
...     i
... #结果如下:
0

除此之外,我们还发现,使用即使已经遍历了yieldDemo(10),但返回竟然是列表类型; 我们通过查看yieldDemo(10)的类型,可知yieldDemo(10)返回的数据类型为“”生成器“”
>>> type(yieldDemo(10))

此时,如果需要遍历显示10000000000000条数据时,使用列表接收就太费内存了!!!!

因此可以使用yield,例子如下:

10条数据为例。。。。。

>>> def yieldDemo2(n):
...     for i in range(n):
...             yield i
...
>>> for i in yieldDemo2(10):
...     i
... 
0
1
2
3
4
5
6
7
8
9

此时,每一次for循环,都会把数值输出,而不是存储在列表类型中,是不是更节省存储空间呢??

yield 的使用远不止如此,只是拙见!!有问题欢迎留言讨论。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号