python 3之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))
<class 'generator'>
此时,如果需要遍历显示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 的使用远不止如此,只是拙见!!有问题欢迎留言讨论。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大脑经常闹风暴@小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值