码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-05-14 11:08:20      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:编程语言   Python   

# 这是学习廖雪峰老师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   

原文地址:http://blog.51cto.com/12758568/2115990

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!