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

    一:迭代器
    1.1引入几个概念:迭代器,可迭代对象,迭代器对象,
    器:可以包含多个元素的容器
    迭代:循环反馈,一次一个
    迭代器:从装有多个值的容器中一次取出一个值给外界
    遍历:被遍历的对象必须是有序容器
    list和str以及tuple靠索引取值,有序容器,可以被遍历
    1.2可迭代对象
    对象:python中的一个对象(装有地址的变量)
    可迭代对象:该对象有_iter_()方法
    [],(),字典和集合等
    1.3迭代器对象
    可迭代对象通过iter得到迭代器对象,可以用next方法取值
    迭代器对象可以做到不依赖索引取值,用next方法取值是从前往后有序的
    迭代器对象取一个值就少一个值,取空了的话要重新生成迭代器对象
    1.4 for循环迭代器,自带异常处理的while循环
    自动获取被迭代对象的对象

    总结:
    可迭代对象:有_iter_()方法的对象,调用该方法返回迭代器对象
    迭代器对象:有_next_()方法的对象,调用该方法从迭代器对象中一次捕获一个值
    for循环迭代器:
    1:自动获取被迭代对象的迭代器对象,
    2:在内部一次一次调用—next方法取值
    3:自动完成异常处理
    二:生成器
    它就是一个包含yield关键字的函数
    它是一个迭代器对象,也就是一个可迭代对象,该函数调用得到的是生成器的对象,且不会执行函数体
    def g_fn():
    print(111111111111111)
    yield '结果1'
    print(222222222222222)
    yield '结果2'
    print(333333333333333)
    yield '结果3'
    print(444444444444444)
    yield '结果4'
    print(555555555555555)
    yield '结果5'
    g_obj = g_fn()
    函数执行一次,在遇到下一个yield的时候停止,且可以拿到yield返回值,
    r1=g_obj._next_()
    print(r1)
    r2=g_obj._next_()
    print(r2)
    生成器可以被for循环迭代
    三:枚举对象
    通过for迭代器 循环遍历 可迭代对象,需要知道迭代的索引
    ls=[1,2,3,4,5]
    for i v in enumerate(ls)
    print(ls)

    承蒙关照
  • 相关阅读:
    5
    4
    3
    crontab -e 报错(E518: Unknown option: foldenable)
    解决无法修改日志时间的问题(Local time zone must be set--see zic manual page 2019 )
    ping测试丢包率
    关闭SELinux
    iotop使用方法
    mysql的备份
    修改uid gid 的起始范围
  • 原文地址:https://www.cnblogs.com/guanlei/p/10649128.html
Copyright © 2011-2022 走看看