学习笔记--可迭代对象、迭代器、生成器

迭代器、生成器、可迭代对象之间什么关系,这两天学习的时候,发现比较绕,总结记录下。

1. 了解迭代器

    首先,我们要知道一个概念,什么叫   ”可迭代”, 所谓的可迭代,简单理解就是可以 被for循环,

  在介绍迭代器之前,我们需要知道两个概念:

  (1)可迭代协议, 所有实现了,__iter__方法的对象,都是可迭代类型。例如,字符串、list、tuple、set,range(数字),以及任何实现了__iter__方法的对象。

  (2)迭代器协议,所有实现了, __iter__方法以及__next__方法的对象,都是迭代器。__next__方法要么返回下一个值,要么抛出一个StopIteration异常,以终止迭代。

  实现了迭代器协议的对象都是迭代器。

2.迭代器的特点:

  迭代器有三个特点

  (1)只能从头到尾,依次取值,不能返回去取某个位置的值。

  (2)任何值只能取一次,取了之后,不能取第二次。

  (3) 迭代器是一个对象,只有在取值时,才真正的去取值。

3迭代器的取值方法:

  迭代器的取值方法有三种:

  (1)使用__next__()方法进行取值,

  (2)使用for循环去取值

  (3)使用list(迭代器对象)进行取值。

4.生成器

  迭代器有很多的优点,但是在定义的时候,还是比较麻烦的,那有没有更加简单的方法获取一个迭代器呢,答案是有的,那就是生成器。

  生成器就是一个装饰器(满足装饰器协议,实现了__next__方法,以及__iter__方法)。并且它的定义比装饰器更加简单,只需要在方法中,添加一个yield,来返回值,就可以了。

  其他和迭代器一模一样。

  

1
2
3
4
5
6
7
8
9
10
def ff():
    for i in range(5):
        yield  i
 
 
if __name__ == '__main__':
    f = ff()  #<generator object ff at 0x000001AD0><br>   print(f)  #
    print(f.__next__())  #0
    print(next(f))          #1
    print(list(f))            #[2, 3, 4]

  

  

 

posted @   往昔遗忘  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示