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

    迭代器

    当我们使⽤⼀ 个循环来遍历某个东西时,这就叫⼀个迭代。它是这个过程本⾝的名字。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:__ iter()__和 __ next() __。

    通过迭代器取值优缺点:

    • 优点:不依赖索引,完成取值
    • 缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值)

    1、可迭代对象

    可迭代对象就是有__iter__()方法的对象,调用该方法返回迭代器对象
    可以进行迭代的对象有:str | list | tuple | dict | set | range() | file | 迭代器对象 | enumerate() | 生成器
    

    2、迭代器对象

    迭代器对象: 有__next__()方法的对象,也就是用该方法一次从迭代器对象中获取一个值,取出一个少一个
    
    迭代器对象有:file | enumerate() | 生成器
    

    重点:
    1.从迭代器对象中取元素,取一个少一个,如果要从头开始去,需要重新获得拥有所有元素的迭代器对象
    2.迭代器对象也有__iter__()方法,调用后得到的是自己本身(当前含义几个元素,得到的就只有几个元素的迭代器对象)
    3.注意:迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象

    3、for循环迭代

    #基于for循环,我们可以完全不再依赖索引去取值了
    dic={'a':1,'b':2,'c':3}
    for k in dic:
        print(dic[k])
    
    for循环的工作原理
    1:执行in后对象的dic.__iter__()方法,得到一个迭代器对象iter_dic
    2: 执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码
    3: 重复过程2,直到捕捉到异常StopIteration,结束循环
    

    生成器

    在 Python 中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。

    def my_generator():
        yield 1
        yield 2
        yield 3
    g_obj = my_generator()
    # my_generator()并不会执行函数体,得到的返回值就是生成器对象
    # 生成器对象就是迭代器对象
    r1 = g_obj.__next__() # 1
    
    for v in g_obj:
        print(v)  # 2 | 3
    
  • 相关阅读:
    python执行线程方法
    Python 多线程教程:并发与并行
    python中遍历文件的3个方法
    docker-compose编写(英文)
    使用Docker构建redis集群--最靠谱的版本
    iptables四个表与五个链间的处理关系
    Docker相关文档
    HTTP 之 Content-Type
    Python之VSCode
    自定义分页
  • 原文地址:https://www.cnblogs.com/linwow/p/10693786.html
Copyright © 2011-2022 走看看