十一、yield生成器

六眼飞鱼酱① 提交于 2019-11-26 17:37:23
1、对比range 和 xrange 的区别
>>> print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print xrange(10)
xrange(10)
如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。
==========================================================
def func1():
return 1
return 2
return 3
print (func1())
问以上结果会打印什么?答案:只有1(因为当它遇到return时代表它的生命周期已经结束,就不会往下再走了)。
现在我把它改变一下,变成这样,问以上结果会打印什么?
答案:<generator object func1 at 0x02CF02D8>
告诉你它是一个生成器,只有你通过for循环才能逐个去调用它
def func1():
yield 1
yield 2
yield 3
print (func1())
 
for i in func1():
print (i)
返回
1
2
3
 
就像
for i in xrange(10)
print (i)
返回
0
1
2
3
4
5
6
7
8
9
因为xrange也是一个生成器
============================================================
自定义生成器(实际上就是在做xrange的功能):
def nrange(num):
temp = -1
while True:
temp += 1
if temp >= num:
return
else:
yield temp
 
for i in nrange(100):
print (i)
=============================================================
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!