【每天几分钟,从零入门python编程的世界!】
今天学习Python中比较难以理解的两个概念:迭代器和生成器。
学习也是一个不断迭代的过程,所谓迭代,就是每次重复的做一件事,从而获得一次反馈。学习就是不断重复,并不断用新的反馈结果来覆盖前一次结果的过程。
●可迭代对象Iterable:凡是能用for循环迭代的对象就是可迭代对象。
可以使用isinsdance()来判断一个对象是否是iterable。
isinstance([],Iterable)
True
isinstance({}, Iterable)
True
isinstance('abc', Iterable)
True
isinstance((x for x in range(10)), Iterable)
True
isinstance(100, Iterable)
False
●迭代器Iterator:Python的iterator对象表示一个数据流。可以被next()函数不断调用并返回下一个数据的对象称为迭代器。
当iterator对象被next()调用不断返回下一个数据,直到没有数据时抛出StopIteration错误,无法返回下一个值。
可以把这个数据看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以iterator的计算式惰性的,只有在需要返回下一个数据的时候他才会计算。
iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
可以使用isinsdance()来判断一个对象是否是iterator。
isinstance((x for x in range(10)), Iterator)
True
True
isinstance([], Iterator)
False
isinstance({}, Iterator)
False
isinstance('abc', Iterator)
False
●iter():用于把可迭代对象生成迭代器对象。
●next():输出迭代器的下一个元素。
list[1,2,3,4]
it=iter(list)
print(next(it))
#运行结果1
print(next(it))
#运行结果2
●生成器generator:一边循环,一边通过算法计算生成元素值的机制,叫生成器。生成器是一个特殊的程序,是迭代器的一种。
通过列表生成式,我们可以直接创建一个列表,但是,受到内存限制,列表容量肯定是有限的,而且创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator
生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。
生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器。
要创建一个generator,有很多种方法,第一种方法很简单,只有把一个列表生成式的[]中括号改为()小括号,就创建一个generator。
总结:生成器都是迭代器对象,即生成器是迭代器的一种,迭代器都是可迭代对象,所以生成器也是可迭代对象。
我是时问新,欢迎关注我。跟我一起从零开始学习Python,每天花一点时间,开启python编程新世界的大门,领略新的风光,让人生多一种可能!
留言与评论(共有 0 条评论) |