首页 > 编程语言 >Python学习:迭代器与生成器的深入解析

Python学习:迭代器与生成器的深入解析

时间:2023-08-20 11:32:29浏览次数:58  
标签:square 迭代 Python self 生成器 num numbers

函数在Python中扮演着重要角色,不仅可以封装代码逻辑,还能通过迭代器和生成器这两种强大的技术,实现更高效的数据处理和遍历。本篇博客将深入探讨Python函数的迭代器和生成器,结合实际案例为你揭示它们的神奇,以及如何巧妙地应用迭代器和生成器来解决实际问题。

迭代器:数据的遍历之道

迭代器是Python中一种特殊的对象,它能够逐个返回数据元素,使得数据的遍历变得更加高效。

迭代器基础

numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
print(next(iterator))  # 输出:1
print(next(iterator))  # 输出:2
print(next(iterator))  # 输出:3

自定义迭代器

class SquareIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index] ** 2
        self.index += 1
        return result
numbers = [1, 2, 3, 4, 5]
square_iter = SquareIterator(numbers)
for num in square_iter:
    print(num)

在案例中,我们定义了一个自定义迭代器SquareIterator,用于将数据中的每个元素平方后返回。

生成器:延迟计算的智慧

生成器是一种更为高级的迭代器,它能够在需要时按需生成数据,实现了更高效的内存利用和数据处理。

生成器函数

def square_generator(data):
    for num in data:
        yield num ** 2
numbers = [1, 2, 3, 4, 5]
square_gen = square_generator(numbers)
for num in square_gen:
    print(num)

生成器表达式

numbers = [1, 2, 3, 4, 5]
square_gen = (num ** 2 for num in numbers)
for num in square_gen:
    print(num)

迭代器和生成器的案例:斐波那契数列

def fibonacci_generator():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
fib_gen = fibonacci_generator()
for _ in range(10):
    print(next(fib_gen), end=" ")

在这个案例中,我们通过生成器实现了一个无限生成斐波那契数列的序列。

总结

迭代器和生成器是Python函数的两大神奇能力,能够在数据处理和遍历中发挥重要作用。本篇博客深入介绍了迭代器的基本原理、自定义迭代器以及生成器的创建和使用,结合实际案例展示了它们的威力。在实际编程中,巧妙地运用迭代器和生成器,可以使数据处理更加高效、节省内存,带你进入数据处理的新境界。

Python学习:迭代器与生成器的深入解析_生成器

Python学习:迭代器与生成器的深入解析_数据处理_02

标签:square,迭代,Python,self,生成器,num,numbers
From: https://blog.51cto.com/u_15288375/7159862

相关文章

  • 【python】如何将枚举指针传递至dll接口中
    在Python中,可以使用 ctypes 模块来将枚举指针传递给DLL接口。以下是一个简单的示例代码,演示了如何在Python中使用 ctypes 将枚举指针传递给DLL接口:importctypes#定义枚举类型classMyEnum(ctypes.Structure):_fields_=[("value",ctypes.c_int)]#加载D......
  • python+playwright 学习-75 playwright 通过浏览器发送post请求
    前言page.goto()可以通过浏览器直接发get请求,playwright也可以支持通过浏览器发送post请求。page.goto()使用page.goto()访问网站的时候,实际上是有返回值的,可以获取到response对象fromplaywright.sync_apiimportsync_playwright,expectwithsync_playwright()asp:......
  • 知识图谱入门:使用Python创建知识图,分析并训练嵌入模型
    本文中我们将解释如何构建KG、分析它以及创建嵌入模型。构建知识图谱加载我们的数据。在本文中我们将从头创建一个简单的KG。 https://avoid.overfit.cn/post/7ec9eb11e66c4b44bd2270b8ad66d80d......
  • python创建虚拟环境【其它人项目】
    download他人项目-创建虚拟环境这是别人的项目打开pycahrm的终端,创建虚拟环境名字为venv【python-mvenvvenv】此时文件目录多出一个venv目录设置里面选择虚拟环境关闭pycahrm里面终端,重开会自动进入虚拟环境里面结束!......
  • python 垃圾回收
    【第1题】Pythonn内存管理以及垃圾回收机制-武沛齐-博客园(cnblogs.com)https://www.bilibili.com/video/BV1F54114761/  元祖 总结:为了回收内存,每个对象都加入了refchain双向环向链表,对象被引用+1,del掉-1,等于0内存就被回收,这个叫引用计数器ob_refcnt;但是像列......
  • python 小案例正则表达式
    正则表达式是一种用于匹配、查找和替换文本的强大工具。在提取网页中的目标数据时,可以使用正则表达式来搜索和匹配特定模式的文本。以下是一个使用正则表达式提取网页中的目标数据的示例代码:importre#网页源代码html="""<divclass="title">正则表达式教程</div><divc......
  • Python分享之python super()
    一、问题的发现与提出在Python类的方法(method)中,要调用父类的某个方法,在Python2.2以前,通常的写法如代码段1:代码段1:classA:def__init__(self):print"enterA"print"leaveA"classB(A):def__init__(self):print"enterB"A.__init__(self)print......
  • Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
    Python函数作为编程的核心,涵盖了众多令人兴奋的概念,如高阶函数、闭包、回调、偏函数和装饰器。本篇博客将深入研究这些概念,结合实际案例为你解析函数的精妙,以及如何巧妙地运用它们来构建更强大、灵活的程序。高阶函数:进一步探索在上文基础上,再次回顾高阶函数,展示它们如何将函数作为......
  • python+playwright 学习-74 set_extra_http_headers设置浏览器请求头部
    前言大部分网站保存登录状态是用cookies,也有个别网站是在请求头部添加token实现保存登录。playwright可以使用set_extra_http_headers()方法设置浏览器请求头部参数set_extra_http_headers()方法设置头部参数headers,字典键值对fromplaywright.sync_apiimportsync_pla......
  • 学生成绩登录系统python(简单的登录)
    根据上课学的内容写一个学生登录系统登录成功后输入成绩操作100=优++90-99优80-90良好70-60一般50-60差50以下渣渣生其余分数为作弊行为#作业:根据上课学的内容写一个学生登录系统登录成功后#输入成绩操作100=优++90-99优80-90#良好70-60一般50-60差5......