生成器
-
在Python这门语言中,生成器毫无疑问是最有用的特性之一。与此同时,也是使用的最不广泛的Python特性之一
-
究其原因,主要是因为,在其他主流语言里面没有生成器的概念。正是由于生成器是一个“新”的东西,所以,它一方面没有引起广大工程师的重视,另一方面,也增加了工程师的学习成本,最终导致大家错过了Python中如此有用的一个特性。那到底什么是生成器呢?
-
有时候,序列或集合内的元素的个数非常巨大,如果全制造出来并放入内存,对计算机的压力是非常大的。
-
下面,我们一起来看看如何创建一个生成器!2种方式
-
生成器推导式:
-
tup = (x for x in range(3))
-
next(tup)
-
但更多情况下,我们使用for循环遍历生成器:
-
for i in tup: print(i)
-
yield关键字创建生成器
-
在 Python中,使用yield返回的函数会变成一个生成器(generator)。 在调用生成器的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行。下面重点理解yield关键字的使用:
-
简单示例代码:函数体通过for循环结合yield返回一个生成器
-
def mySum(): print('before') print('after') yield 'result' f = mySum() print(f,next(f))
-
思考:下述函数的执行结果是什么?
-
def yieldTest(): i = 0 while i < 3: temp = yield i print(temp) i += 1
-
obj = yieldTest() #返回的生成器对象 print(next(obj))
-
obj = yieldTest() #返回的生成器对象 print(next(obj)) print(next(obj))
-
-
for i in yieldTest(): print(i)