在代码中遇到了一个关键字yield,查yield遇到了generator生成器,查generator遇到了迭代。于是从后往前一点点看吧
迭代iteration
当我们建立了一个列表、元组或字符串时,我们能够逐个读取其中的内容,因此称之为可迭代对象。例如用列表生成式建立一个列表:
lsta=[x**2 for x in range(10)]
for x in lsta:
print(x,end=' ')
# 0 1 4 9 16 25 36 49 64 81
所有能够使用for...in...语法的都是迭代器,如列表(list)、元组(tuple)、字符串(str)、字典(dict)等,它们能够存储一定数量的元素并允许在其上进行特定操作。由于每一个元素都会占用特定的内存空间,因此当数据量非常大的时候其消耗的内存空间也将很大。如果我只是想按序读取而不需要将大量的元素全部存储在内存空间,那么生成器将会是一个很好的选择。
生成器generator
生成器是可迭代的,与列表类似,不同的是:生成器仅可读取一次,因为它并没有将所有元素放到内存中,而是实时生成数据。创建一个生成器代码如下:
gena=(x**2 for x in range(10))
print(gena) # <generator object <genexpr> at 0x0383FCF0>
for x in gena: