美文网首页
python 迭代器 学习笔记

python 迭代器 学习笔记

作者: 超人不会飞_9664 | 来源:发表于2018-09-21 07:55 被阅读0次

迭代器:首先要明确的概念是迭代器不是容器迭代器就是为了实现__next__()方法的对象(用于遍历容器中的数据)

for i in 'Fishc': 

    print(i)

F

i

s

h

c

注意 迭代器迭代对象变成字典时,只迭代字典里的key值

迭代器的两个BIF:

. iter()    函数用来生成迭代器(会调用到__iter__()方法),以此迭代器里拥有__next__()方法,再用next()函数就睡自动调用到迭代器里的__next__()方法

. next()

迭代器的两个两个魔法方法:

. __iter__()   返回迭代器自身可以返回另一个可迭代对象

. __next__() 遍历容器中的每个元素

敲黑板啦!

__iter__()  不光可以 返回迭代器自身(self),__iter__方法也可以返回另一个可迭代对象

class IterTest:

    def __iter__(self):

        return iter([1,2,3])

for iin IterTest():

    print(i)

1

2

3


我们迭代容器中元素会很自然的想到for 循环  那如果不用for 循环呢,那就自然需要用到迭代器的那两个BIF啦

string = 'FishC'

it = iter(string)

next(it)

'F'

next(it)

'i'

next(it)

's'

next(it)

'h'

next(it)

'C'

next(it)

StopIteration

string通过 iter()变成迭代器以后,迭代器自身是拥有__next__()方法的,而next()这个BIF会自动调用到__next__()方法,从而遍历容器中的元素,而对于自定义的迭代器 如果没写__iter__()方法的我们是不能用for循环的,但是可以直接用next()方法,因为for循环会调用iter()方法自然要调用到__iter__()方法 而如果自定义迭代器没有这个方法就自然用到for循环

class Fibs:

    def __init__(self,n):

        self.a = 0

        self.b = 1

        self.n = n

    def __next__(self):

        self.a,self.b = self.b,self.a+self.b

        if self.a <self.n:

            return self.a

        raise StopIteration

fibs = Fibs(20)

print(next(fibs))

1

那问题来了 既然可以用到这两个BIF就能实现for循环的功能,但是要手动next(),那我们将这两个BIF搭配while语句就能够完全实现for循环了,代码如下:

当然理是这理,实际运用时大家还是直接for 循环一句搞定啦,毕竟python追求的是至简,嘻嘻


基本内容就这些啦,也该出点干货了,那就那斐波那契数列来创建一个迭代器的类吧,首先斐波那契名字高大上,但我们只需要知道它是一个数列就行了,就像等差 ,等比数列一样 ,那斐波那契啥也不等 ,它的通项公式

F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)

代码如下:

但要注意一下第8行代码的写法, self.a,self.b = self.b,self.a+self.b,一行里同时对对两个变量赋值没有问题,那我们分开两个赋值,就像这样:

为啥运行结果完全不一样了呢,按我们来分析下,首先 self.a,self.b = self.b,self.a+self.b 是将右边的值赋值给左边的变量,那self.a被赋值成1,self.b被赋值成0+1   这很合乎逻辑和常理对吧,那我换成

self.a = self.b

self.b = self.a+self.b

那self.a被赋值成1,那下面的self.b就是被1+1赋值了

所以这个小细节要注意一下哦

当然这段代码还可以再完善一下,譬如可以设定这个数列的长度,聪明的你知道咋弄了吗?算啦 废物 还是我来告诉你吧

总结:

for 循环会自动调用iter()函数将可迭代对象变成迭代器对象,相当于自动调用当前对象所对应的__iter__方法,然后一直调用next()函数,相当于自动调用当前对象所对应的__next__方法.

全程手码,虽然是些基础知识,但为了自己加深印象,就在简书记录下,若有需要指点的尽管批评,哈哈 菜鸟不易

多敲代码才是真理



相关文章

  • python学习笔记04

    python学习笔记之04. 迭代器和生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式...

  • 大师兄的Python学习笔记(十三): 理解装饰器

    大师兄的Python学习笔记(十二): 常用高级函数大师兄的Python学习笔记(十四): 迭代器、生成器和协程 ...

  • 大师兄的Python学习笔记(十五): Socket编程

    大师兄的Python学习笔记(十四): 迭代器、生成器和协程大师兄的Python学习笔记(十六): FTP与ftp...

  • python cookbook学习笔记(1)

    python cookbook学习笔记连载中回调会第4章查看迭代器的用法 反向迭代迭代函数reversed() 4...

  • Python ☞ day 4

    Python学习笔记之 (set)集合 & 迭代器 & 函数 & 匿名函数 & 高阶函数 set set:类似di...

  • python 迭代器 学习笔记

    迭代器:首先要明确的概念是迭代器不是容器,迭代器就是为了实现__next__()方法的对象(用于遍历容器中的数据)...

  • python学习笔记-迭代器

    列表生成式 通过列表生成式,我们可以直接创建一个列表。但是,受内存限制,列表容量肯定是有限的。而且,传建一个包含1...

  • Python 中的迭代器

    Python 中的迭代器 Python 3中的迭代器 容器与迭代器 在Python 3中,支持迭代器的容器,只要支...

  • Python中的迭代器和生成器

    今天我们来学习下Python中的迭代器和生成器。 迭代和可迭代对象 在学习迭代器之前,我们需要了解下迭代和可迭代对...

  • 第十天学习总结

    一、学习内容 1、Python学习了迭代器和生成器,迭代对象的创建、迭代器的两个基本的方法iter() 和 nex...

网友评论

      本文标题:python 迭代器 学习笔记

      本文链接:https://www.haomeiwen.com/subject/jgwonftx.html