首页 > 编程语言 >python 生成器

python 生成器

时间:2024-09-13 09:25:49浏览次数:9  
标签:__ generator 迭代 python 生成器 next print

一、可迭代对象、迭代器、生成器 的区别

可迭代对象:只要实现 __ iter __ 方法或者实现 __ getitem __方法而且其参数从0开始索引,那么该对象就是可迭代对象。可以用 for 循环遍历,常见的有string,list,tuple,dict,set。

迭代器: 实现了__ iter __ 方法和 __ next __ 方法的对象。__ iter __ 方法用于返回迭代器本身,而 __ next __ 用于返回下一个元素。可以用iter()函数将可迭代对象转化成迭代器。

生成器:生成器是一种特殊的迭代器,生成器通过定义一个包含yield关键字的函数来创建。每次调用yield时,函数会暂停并返回一个值,保留函数的状态以便下次继续执行。不需要在内存中存储整个序列,这使得它们非常适合处理无限序列或大数据集

 

二、生成器原理

生成器的原理与功能可以分为以下几个核心点:

  1. 迭代行为:Python中的生成器作为一种特殊的迭代器,实现了迭代器协议,即它们有一个__next__()的方法。这允许生成器逐个产生序列中的元素。
  2. 状态挂起:当生成器函数执行到yield语句时,它会返回一个值给调用者,并且暂停其自身的状态(包括局部变量、指令指针等)。在下一次调用__next__()方法时,它会从上次暂停的地方继续执行,而不是从头开始执行函数。
  3. 内存效率:普通函数一次性计算并返回所有结果,通常需要存储整个结果集合,这对内存是一种负担。生成器函数则是按需计算,每次只产生一个结果,所以非常节省内存。
  4. 代码简洁:生成器提供了一种简便的方法来实现迭代器而无需定义一个类来实现__iter__()__next__()方法,使得代码更加简洁。

生成生成器的几种方式

1、推导式:

generator = (i for i in range(10))

print(type(generator))
# 调用__next__()方法
print(generator.__next__())
print(generator.__next__())

# 控制台输出
'''
<class 'generator'>
0
1
'''

2、yield 关键字

def generator():
    for i in range(10):
        yield i

gener = generator()
print(type(gener))
# 调用__next__()方法
print(gener.__next__())
print(gener.__next__())

# 控制台输出
'''
<class 'generator'>
0
1
'''

3、yield from 后面需要加的是可迭代对象,它可以是普通的可迭代对象,也可以是迭代器,甚至是生成器。

def generator():
    yield from range(10)

gener = generator()

print(type(gener))
# 调用__next__()方法
print(gener.__next__())
print(gener.__next__())

# 控制台输出
'''
<class 'generator'>
0
1
'''

 

 

标签:__,generator,迭代,python,生成器,next,print
From: https://www.cnblogs.com/shenh/p/18350538

相关文章

  • Python文件操作:上下文管理器(with语句)②
    文章目录1.上下文管理器概述1.1什么是上下文管理器?1.2为什么使用上下文管理器?1.3`with`语句的基本语法2.文件操作中的上下文管理器2.1使用`with`语句打开文件2.2读取文件2.2.1读取整个文件内容2.2.2逐行读取文件2.3写入文件2.3.1覆盖写入2.3.2追加写入3......
  • 【Python学习笔记】 第7章 字符串基础
    本章范围本章主要讲str字符串类型,有关的操作适用于Unicode处理。Unicode简介ASCII是Unicode的简单形式,但Unicode适用于非英语地区的人们。两者在文件中的编码不同。在Python3.X中,有三种字符串类型:str用于Unicode文本,bytes用于二进制数据,bytearray是bytes的一种可修改的变体......
  • 什么是生成器(Generators)?
    生成器(Generators)在不同的领域和上下文中具有不同的含义,但通常可以概括为一种能够生成新实例或数据的系统、模型或特殊类型的函数。以下是对生成器在不同领域的具体解释:书在python33  点(0M1.编程语言中的生成器在编程语言中,特别是像Python这样的动态语言中,生成器是一种......
  • Python中的观察者模式:从入门到精通
    引言观察者模式允许对象(称为“观察者”)注册到另一个对象(称为“主题”或“被观察者”),从而在主题状态改变时自动收到通知。这种机制使得多个观察者可以独立地响应同一个事件,增强了系统的灵活性和可维护性。特别是在构建高度解耦、易于扩展的应用程序时,观察者模式显得尤为重要。基础......
  • python+flask计算机毕业设计基于的社会公益服务平台的设计与实现9iel49(程序+开题+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今社会,随着信息技术的飞速发展,互联网已成为推动社会公益事业创新的重要力量。然而,传统公益模式在信息传播、资源调配、参与便捷性等方......
  • python+flask计算机毕业设计基于前后端分离的网上音乐推荐系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字音乐已成为人们日常生活中不可或缺的一部分。面对海量的音乐资源,用户如何快速准确地找到符合个人喜好的音乐......
  • python+flask计算机毕业设计基于智能推荐的宠物之家网站设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和人们生活水平的提高,宠物已成为许多家庭不可或缺的重要成员。宠物市场的繁荣不仅体现在宠物数量的激增上,更在于宠物主......
  • 如何使用python中的math
    首先,导入math函数库。一、计算平方根输入一个数值,保存在变量n中。用函数sqrt,计算变量平方根的值。二、计算幂可以用函数exp,计算e的x次幂。三、计算对数设置两个数,保存在变量n和a中。接着,用log函数计算以a为基数n的对数。运行程序,其结果如下图所示。......
  • 如何查看python文档
    调用help函数,可以看到一个函数或者方法的字符串文档。In [1]: import requestsIn [2]: help(requests.get)Help on function get in module requests.api:get(url, params=None, **kwargs)    Sends a GET request.    :param url: URL fo......
  • Python中的装饰器:解锁代码的无限可能
    引言装饰器模式是Python中一种非常实用的设计模式,它允许我们在不修改原函数或类的基础上为其添加新的功能。这种非侵入式的方式不仅提高了代码的复用性,还使得程序更加模块化和易于维护。无论是进行权限校验、记录日志还是缓存计算结果等场景下,装饰器都能大显身手。基础语法介绍......