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