十一、yield生成器
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)
=============================================================