标签:for 通过 方法 end 一个 pre ext tar log
有一篇文章写得迭代器和生成器,写得很好:https://www.cnblogs.com/wj-1314/p/8490822.html
#列表生成器
print([i*2 for i in range(10)])
#生成器:调用时才会产生相应的数据,不调用时不暂用内存,同时只记住当前的位置,只有一个__next__()方法
b=(i*2 for i in range(10))
for i in b:
print(i)
通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator
生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。
生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器
Iterable:直接作用于for循环的对象
Iterator:可以被next()函数调用并不断返回下一个值的对象称为迭代器,迭代器可以通过iter()函数获得一个Iterator对象
标签:for 通过 方法 end 一个 pre ext tar log
原文地址:https://www.cnblogs.com/wendyw/p/9724819.html