python学习-迭代器

关于迭代器的概念及讲解,在廖雪峰老师的网站上已经说的很详细了,这里只是整理下自己的学习笔记

这里要区分下迭代器与可迭代对象

迭代器的含义及范围:

  迭代的中文意思是重复反馈过程的活动。它是一个动作,并重复执行相同动作返回结果,并将这个结果作为下次重复动作的输入。

  在python中,具有多个相同类型元素的对象,均为可迭代对象,如字典dict,元组tuple,列表list,字符串str等。

而迭代器表示的是一个数据流,可以被python内建函数next()所调用,它是一个惰性过程,需要被使用的时候才会被计算。

可以通过iter()将一个可迭代对象转为一个迭代器对象。

  迭代器对象的类型是Iterator

  可迭代对象的类型是Iterable

==========================================================================================

重新整理容器、可迭代对象、迭代器、生成器在python中的概念和意义

容器:一种把多个元素组织在一起的数据结构。

    容器中的元素可以逐个迭代获取,可以用in;not in等关键字判断元素是否包含在容器中。容器之所以可以使用某种方式来获取其中的每一个值,其原因是因为它是一个可迭代对象。但不是所有容器都是可迭代对象(Bloom filter)。

    常见的容器对象:list(列表),set(集合),dict(字典),tuple(元组),str(字符串)

可迭代对象:

    可以返回一个迭代器的对象都可以称为可迭代对象。我理解的,凡是可以通过iter()内建方式返回一个迭代器的。

ll = [1, 2, 3] # 构造一个列表,容器
ll1 = iter(ll) # 使用iter方法
next(ll1)      # 调用next方法获取ll1中的值
print type(ll) # 可迭代对象
print type(ll1)# 迭代器

    可迭代对象和容器一样,是一种通俗的讲法,不是具体的数据类型。可迭代对象实现了__iter__()方法,该方法返回一个迭代器对象。

注:在执行代码for循环遍历一个可迭代对象的时候,实际的执行情况是,将该可迭代对象执行iter()方法获得迭代器,然后执行next()方法依次获取其中的内容。

迭代器:

    迭代器是一个带状态的对象。可以在调用next()方法时返回容器中的下一个值。任何实现了__iter__和__next__方法的对象都是迭代器(python3)或实现了next()方法和__iter__方法(python2)。

生成器:

    一种特殊的迭代器。不需要像迭代器的类一样具有__iter__和__next__方法,只需要一个yield关键字。生成器一定是迭代器,迭代器却不一定是生成器。因为生成器是以一种懒加载的方式生成值,它定义的是初值及生成数值的方式。

使用生成器生成斐波那契数列的方式:

def fib(): # 0,1,1,2,3,5,8,13,21...
    start, end = 0, 1
    while true:
        yield end
        start, end = end, start+end

fib()方法在执行时不会显示的执行里面的代码,直到显示的调用next()方法才会执行并且碰到yield停下来,返回yield的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值