• 迭代器和生成器


    迭代器

    迭代协议:有__next__()方法的对象会前进带下一个结果,在末尾时会引起StopIteration异常。

    迭代器:包含有next方法的实现,在正确范围内返回期待的数据以及超出范围后能够抛出StopIteration的错误停止迭代。

    可迭代对象:我们在使用列表、元组、字典、字符串、集合等数据类型时(这些数据类型含有__iter__()方法,可认为是可迭代对象),往往会认为他们就是迭代器,其实并不是,因为它们并没有__next__()方法,那为什么它的确可以迭代呢?因为他们都有一个__iter__()方法可以把他们转化成迭代器。

    列表、元组、字符串是序列。有序。

    生成器Generator

    标志性关键字:yeild

    生成器的本质就是迭代器

    生成器函数:使用yeild替代了return作为返回值的函数可称作生成器函数

     1 def test():
     2     for i in range(5):
     3         yield i
     4 
     5 t = test()
     6 print(next(t))
     7 print(next(t))
     8 print(next(t))
     9 print(next(t))
    10 print(next(t))
    11 print(next(t))

    结果:

    1 0
    2 1
    3 2
    4 3
    5 4
    6 Traceback (most recent call last):
    7   File "F:/pycharm/code/practice/practice1/1.py", line 11, in <module>
    8     print(next(t))
    9 StopIteration

    生成器一次相当于只是产生了一个结果,大大减少了内存的使用

    s = (i for i in range(10))
    print(type(s))
    <class 'generator'>
  • 相关阅读:
    【MySQL】(三)文件
    【MySQL】(二)InnoDB存储引擎
    Linux Shell脚本编程-信号捕获
    Linux Shell脚本编程-数组和字符串处理
    Linux Shell脚本编程-函数
    Linux Shell脚本编程-语句控制
    Linux Shell脚本编程-基础2
    Linux Shell脚本编程-基础1
    Awk
    Sed
  • 原文地址:https://www.cnblogs.com/hexiaoqi/p/9348087.html
Copyright © 2020-2023  润新知