python迭代器解析

1.什么是迭代器

      拥有__iter__方法和__next__方法的对象就是迭代器

1、迭代

迭代是访问集合元素的一种方式,可以将某个数据集内的数据“一个挨着一个的取出来”,就叫做迭代。

 

2、可迭代协议

协议就是互相规定好的。可迭代协议的定义非常简单,就是内部实现了__iter__方法。

 

3、迭代器协议:必须拥有__iter__方法和__next__方法。

 

思考:

  • 列举 能被for 循环的内容

list、dic、str、set、tuple、f.open()、range()、enumerate

 

  • dir()方法获取对应数据类型的所有方法。

dir() 获取对应数据类型的所有方法,带有下划线的方法叫双下方法。

例如:print(dir([]))

 

  • 查看 [],{},'',range() 共有的方法:使用集合的交集进行获取。

找到了__iter__ 方法。有此方法的对象就是一个可以被迭代的对象。

 

  

4.__iter__方法的作用是返回一个迭代器。

 

5.打印一下迭代器中的方法。

迭代器中有三个特有的方法:

__setstate__    : 决定取值的位置

__lenght_hint__    : 获取元素的个数

__next__  : 获取元素

 

2.for循环原理

for 循环原理: 先判断是否可迭代 , 调用__iter__(),返回迭代器,
调用 迭代器的 __next__()方法, 返回值给 i

 

 

3.迭代器作用

节约内存,取得时候在生成数据,python2.7的时候range()方法就立刻生成了数据

占用了大量的内存空间。

4.应用场景

1、数据类型转换 例如 list和元组之间的转换底层就是使用的迭代器

 

 

迭代器案例——斐波那契数列

class Fib(object):

    def __init__(self, all_num):
        self.all_num = all_num
        self.a = 1
        self.b = 1
        self.current_num = 0

    def __iter__(self):

        return self  # 返回自己 调用自己的魔术方法

    def __next__(self):

        if self.all_num <= 2:
            self.current_num += 1
            if self.current_num == 3:
                raise StopIteration
            return self.a
        else:
            if self.current_num < self.all_num:
                ret = self.a
                self.a, self.b = self.b, self.a + self.b
                self.current_num += 1
                return ret
            else:
                raise StopIteration


for i in Fib(10):
    print(i)

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值