• python生成器与迭代器


    Python中的生成器与迭代器是核心的高级特性,它们为高效的数据处理提供了强大的工具。下面将详细探讨Python中的生成器与迭代器的概念、用法以及它们在实际编程中的重要性。

    一、迭代器(Iterator)

    迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter()next()。字符串,列表或元组对象都可用于创建迭代器。

    1. 迭代器的创建

    Python中,迭代器是通过调用集合(如列表、元组、字典、集合等)的iter()方法创建的。例如:

    my_list = [1, 2, 3]
    my_iter = iter(my_list)
    
    2. 迭代器的使用

    创建了迭代器之后,可以使用next()方法来访问集合中的元素。next()方法会返回迭代器的下一个元素。如果所有元素都已被访问,next()会抛出一个StopIteration异常。

    print(next(my_iter))  # 输出: 1
    print(next(my_iter))  # 输出: 2
    print(next(my_iter))  # 输出: 3
    print(next(my_iter))  # 抛出 StopIteration 异常
    
    3. 迭代器的协议

    迭代器遵循迭代器协议,必须实现两个方法:

    • __iter__() 方法返回迭代器对象本身。这是使得对象可以在for循环中被使用。
    • __next__() 方法返回容器的下一个元素。在元素全部返回之后,抛出StopIteration异常来告知迭代的结束。
    4. 可迭代对象

    可以使用isinstance()函数来判断一个对象是否是Iterable(可迭代的)对象。如果对象实现了__iter__()方法,那么它就是可迭代的。

    from collections import Iterable
    print(isinstance(my_list, Iterable))  # 输出: True
    

    二、生成器(Generator)

    生成器是一个用于创建迭代器的简单而强大的工具。它们写起来就像是正规函数,但是当它们要返回数据时会使用yield语句。每次next()被调用时,生成器会从上次离开位置恢复执行(它会记住所有数据值和哪条语句上次执行)。

    1. 创建生成器

    生成器函数允许你声明一个像迭代器那样的行为,不需要写__iter__()__next__()方法。生成器使用yield语句返回一个值,并且记住自己的执行状态,等待下一次调用next()时从上次停止的地方继续执行。

    def my_generator():
        n = 1
        print('This is printed first')
        yield n
        
        n += 1
        print('This is printed second')
        yield n
        
        n += 1
        print('This is printed at last')
        yield n
    
    2. 使用生成器
    for value in my_generator():
        print(value)
    

    输出:

    This is printed first
    1
    This is printed second
    2
    This is printed at last
    3
    
    3. 生成器的优势

    生成器相比于普通的函数有几个显著的优点:

    • 内存使用:生成器仅在需要时才生成和存储数据项,这使得它们非常适合处理大量数据。
    • 简洁的代码:生成器函数允许声明类似迭代器的行为,但代码更加简洁和直观。
    • 无限数据流:由于它们在每次迭代时产生数据,因此可以使用生成器表示无限数据流。
    4. 生成器表达式

    生成器表达式是列表推导式的生成器版本。它们看起来很像列表推导式,但它们返回一个生成器而不是列表。

    my_gen = (x*x for x in range(3))
    for i in my_gen:
        print(i)
    

    输出:

    0
    1
    4
    

    三、生成器与迭代器的应用

    1. 大数据处理

    在处理大量数据时,生成器特别有用,因为它们允许逐个处理数据项,而不是一次性将所有数据加载到内存中。

    2. 管道和协程

    生成器可以用于创建管道和协程,其中数据通过一系列的处理步骤传递,每个步骤都是一个生成器。

    3. 异步编程

    生成器可以用于异步编程,允许在等待IO操作(如网络请求)完成时暂停和恢复执行。

    四、总结

    Python中的生成器与迭代器是强大的工具,它们提供了一种高效、简洁和灵活的方式来处理数据。通过允许逐个处理数据项,它们使得处理大量数据成为可能,同时减少了内存使用。生成器和迭代器还支持复杂的编程模式,如管道、协程和异步编程。总的来说,它们是Python程序员应该熟悉和掌握的核心概念。

    通过熟练使用生成器和迭代器,Python开发者可以编写出更加高效、易于维护和理解的代码,充分利用Python作为一种强大而灵活的编程语言的优点。

  • 相关阅读:
    vueRouter个人笔记
    骨传导耳机推荐:2022年好用的骨传导耳机
    开源六轴机械臂myCobot 280末端执行器实用案例解析
    Flutter 文件上传 (基于 http.dart)
    Linux定时任务调度
    spring5.0源码解析 从源码角度分析 advice 的执行顺序 aop 05
    基于SSM的公司仓库管理系统(有报告)。Javaee项目
    工厂模式解耦-单例
    javascript中什么叫“json方式”?
    代码随想录第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
  • 原文地址:https://blog.csdn.net/hong161688/article/details/140400107