# 把一个列表生成式的[]改成(),就创建了一个generator>>> L = [x * x for x in range(10)]>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x1022ef630># 遍历generator不常用写法:通过next()函数获得generator的下一个返回值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。>>> print(next(g))# 遍历generator常用写法:使用for循环遍历generator>>> for n in g:... print(n)# 通过异常捕获,处理next()到最后没有值的情况,也能获取到结束值e.value = 'done'>>> while True:... try:... x = next(g)... print('g:', x)... except StopIteration as e:... print('Generator return value:', e.value)... break
不息。
一边循环一边计算的机制,称为生成器:generator
优点:不必创建完整的list,从而节省大量的空间
普通函数转变为generator函数方式:增加yield,next()遇见yield就会返回,再次next()就再次从yield处继续执行。