不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下 2 步:也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。
def intNum(): print("开始执行") for i in range(5): yield i print("继续执行") num = intNum()由此,我们就成功创建了一个 num 生成器对象。显然,和普通函数不同,intNum() 函数的返回值用的是 yield 关键字,而不是 return 关键字,此类函数又成为生成器函数。
#调用 next() 内置函数 print(next(num)) #调用 __next__() 方法 print(num.__next__()) #通过for循环遍历生成器 for i in num: print(i)程序执行结果为:
开始执行
0
继续执行
1
继续执行
2
继续执行
3
继续执行
4
继续执行
yield i
,而此时的 i==0,因此 Python 解释器输出“0”。由于受到 yield 的影响,程序会在此处暂停。yield i
,此时 i==1,因此输出“1”,然后程序暂停。注意,在 Python 2.x 版本中不能使用 __next__() 方法,可以使用 next() 内置函数,另外生成器还有 next() 方法(即以 num.next() 的方式调用)。
num = intNum() print(list(num)) num = intNum() print(tuple(num))程序执行结果为:
开始执行
继续执行
继续执行
继续执行
继续执行
继续执行
[0, 1, 2, 3, 4]
开始执行
继续执行
继续执行
继续执行
继续执行
继续执行
(0, 1, 2, 3, 4)
相比迭代器,生成器最明显的优势就是节省内存空间,即它不会一次性生成所有的数据,而是什么时候需要,什么时候生成。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有