Python学习笔记__3.5章 迭代器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习笔记__3.5章 迭代器相关的知识,希望对你有一定的参考价值。

# 这是学习廖雪峰老师python教程的学习笔记

1、概览

我们已经学习了list、tuple、dict、set、strgenerator、generator function 这些可以用for 循环的就是可迭代(Iterable)对象

但其中只有generator generator function,可以被 next() 函数调用

而能被next函数调用的 Iterable对象,我们称为迭代器(Iterator

 

1.1Iterable Iterator 的转化

虽然Iterable 不一定是 Iterator。但我们可以用 iter() 函数进行转化

listdictstrIterable可以使用iter()函数变成Iterator

# for 循环遍历 list

for x in [1, 2, 3, 4, 5]:

    pass

# 转化为 generator 遍历

it=iter([1,2,3,4,5])  # 定义 generator对象 it

 

while True:

        try:

            x=next(it)

        except StopIteration:

            break

1.2、为什么 Iterable 不一定是 Iterator

为什么list、dict、str等数据类型不是Iterator 呢?

因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。这个数据流可以看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

 

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

 

1.3、小结

  1. 凡是可作用于for循环的对象都是Iterable类型;

  2. 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

  3. 集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

  4. Pythonfor循环本质上就是通过不断调用next()函数实现的


以上是关于Python学习笔记__3.5章 迭代器的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记__3.2章 迭代

python学习笔记第九节(迭代器,生成器,三元表达式)

python基础学习笔记

Python学习笔记__4.4章 装饰器(添加额外功能)

Python学习笔记——迭代器(RandSeq和AnyIter)

Python100天学习笔记Day20 迭代器与生成器及 并发编程