zoukankan      html  css  js  c++  java
  • 迭代器和生成器

    迭代器

    迭代协议:有__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'>
  • 相关阅读:
    ios网站,博客
    iOS获取手机相关信息
    iOS网络检测
    iOS工程预编译文件的创建
    Gdata XML解析配置和简单使用
    (转)xmpp 环境配置-支持扩展
    xmpp 登录注册小结
    移动端布局
    inline-block的间隙问题 box-orient属性 line-clamp属性 margin问题
    rem布局及响应式布局
  • 原文地址:https://www.cnblogs.com/hexiaoqi/p/9348087.html
Copyright © 2011-2022 走看看