Generators
与列表生成器的区别
列表生成器:直接将结果全部运算出来,并储存在内存当中 生成器: 本质上还是一个函数,储存在内存当中的是函数,而非运算结果 生成器只有在调用的时候,才会计算并返回生成结果 (生成器属于迭代器的一种)
生成器:(f(x) for x in range(a,b))
生成器的语法与列表生成器几乎一样, 只是将大括号[ ] 换成了圆括号 ( )
生成器须用next( )函数进行调用 next()的特点: 每调用一次,返回下一个运算结果 直到最后一个元素后,返回StopIteration错误
def f(x):return x*xg = (f(x) for x in range(1,5))while 0 != 1:try:p = next(g)ex#=======================================#output149
def f(x):return x*xg = (f(x) for x in range(1,4))while 0 != 1:try:p = next(g)print(p)except StopIteration :print("StopIteration")break#=======================================#output149StopIteration
for 循环
for循环本身就会不断调用next( )函数 当遇到”StopIteration”错误时就会停止循环
def f(x):return x*xg = (f(x) for x in range(1,4))for i in g:print(i)#=======================================#output149
迭代器
生成器是迭代器
from collections import Iterable #可迭代对象from collections import Iterator #迭代器对象def f(x):return x*xg = (f(x) for x in range(1,4))G1 = isinstance(g, Iterable)G2 = isinstance(g, Iterator)print(G1)print(G1)#=======================================#outputTrueTrue
