zoukankan      html  css  js  c++  java
  • python 基础(五) 迭代器与生成器

    迭代器和生成器

    迭代器 iterator

    (1) 迭代对象:

    可以直接作用于for循环的 称为可迭代对象(iterable)可以通过 isinstance 判断是否属于可迭代对象

    可以直接作用于for循环的数据类型为:

    1. 列表,字典,集合,元组,字符串...

    2. generator 带yield的函数

    实例 判断哪些是可迭代对象

     
    from collections import Iterable
    print(isinstance('',Iterable)) #True
    print(isinstance(1,Iterable)) #False
    print(isinstance(True,Iterable)) #False
    print(isinstance([],Iterable)) #True
    print(isinstance(1.1,Iterable)) #False
    print(isinstance((),Iterable)) #True
    print(isinstance(set(),Iterable)) #True
     
    (2) 迭代器 iterator
    1. 是快速访问集合的一种方式

    2. 迭代器提供了俩个方法 iter() 和 next()

    3. 迭代器在访问的时候 只能前进 不能后退

    4. 当数据被访问完以后 再次访问 则会抛出 StopIteration的错误

    5. 迭代器的前提 必须是一个可迭代对象

    6. 称为迭代器以后 增加了next方法进行取值 并且依然支持for循环

    判断当前是否属于迭代器:

    from collections import Iterator
    print(isinstance([],Iterator))  #False
    print(isinstance(iter([]),Iterator))  #True
     

    生成器 generator

    1. 带有yield 的函数

    2. 使用列表推导式 外层使用小括号 称之为生成器

    3. 生成器 也能够使用 迭代器的 next方法 生成器也实现了迭代器的功能

    (1) 使用列表推导式生成的生成器

    可以使用next 并且 可以作用于for循环

    myList = (x for x in range(100000000000)) #generator
    用一个生产一个 并不是一次性的全部生产出来 节约资源
    from collections import Iterator,Generator
    myList = (x for x in range(100000000000)) #generator
    myList = (x for x in range(3)) #generator
    print(isinstance(myList,Iterator)) #True
    print(isinstance(myList,Generator)) #True
     

    (2) 带yield的函数

    1. yield

    2. next()

    生成器的拆分 (后期的协程 就是基于当前的生成器 只是可以之间通过send方法进行通信 节省资源的开销 因为是单进程单线程)

     
     
    #生成器拆分
    def func():
        print(1)
        yield 'a'
        print(2)
        yield 'b'
        
    f = func()
    # print(f)
    print(next(f))
    print(next(f))
    print(next(f))
     

    每次调用next 会执行到下一个yield 位置并停止 将yield的值 进行返回

     

  • 相关阅读:
    SQL注入实验-2021.01.24
    数据库的搭建与基本语句2021-01-24
    Linux
    磁盘配置
    在Vmware中Centos下的Hadoop环境搭建
    Linux系统(CentOS)-2021.1.19
    中间件,JavaScript,PHP及burpSuite暴力破解实验-2021.1.16
    html,css学习笔记-2021.1.15
    第一周学习视频(二)
    第一周学习视频(一)
  • 原文地址:https://www.cnblogs.com/gugubeng/p/9715246.html
Copyright © 2011-2022 走看看