首页 > 编程语言 >Python黑魔法:探秘生成器和迭代器的神奇力量

Python黑魔法:探秘生成器和迭代器的神奇力量

时间:2023-07-03 11:15:38浏览次数:66  
标签:__ 黑魔法 迭代 Python self 生成器 iter next

在Python中,生成器和迭代器是实现惰性计算的两种重要工具,它们可以帮助我们更有效地处理数据,特别是在处理大数据集时,可以显著减少内存的使用。接下来,我们将详细介绍这两种工具。

一、迭代器

迭代器是一种特殊的对象,它可以遍历一个集合中的所有元素。任何实现了__iter__()和__next__()方法的对象都可以被称为迭代器。

1.1 创建迭代器

首先,让我们通过一个简单的例子来看看如何创建一个迭代器:

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

            # 使用自定义的迭代器
my_iter = MyIterator("Hello")
for char in my_iter:
    print(char)

在这个例子中,我们创建了一个迭代器,它可以逐个返回给定字符串中的所有字符。当我们试图获取下一个元素时,如果还有元素可供返回,就返回该元素,否则就抛出StopIteration异常。

1.2 使用内置的迭代器

Python中有许多内置的迭代器,如列表迭代器、字典迭代器、文件迭代器等。下面是一些例子:

# 列表迭代器
list_iter = iter([1, 2, 3])
print(next(list_iter))
print(next(list_iter))
print(next(list_iter))

# 字典迭代器
dict_iter = iter({"a": 1, "b": 2, "c": 3})
print(next(dict_iter))
print(next(dict_iter))
print(next(dict_iter))

# 文件迭代器
with open("test.txt") as file:
    for line in file:
        print(line, end="")

二、生成器

生成器是一种特殊的迭代器,它更加简洁和灵活。生成器可以通过两种方式创建:生成器函数和生成器表达式。

2.1 生成器函数

生成器函数是包含yield关键字的函数。当调用生成器函数时,它会返回一个生成器对象,我们可以通过next函数或for循环来获取生成器中的元素。
以下是一个生成器函数的例子:

def my_generator(n):
    i = 0
    while i < n:
        yield i
        i += 1

        # 使用自定义的生成器
for num in my_generator(5):
    print(num)

在这个例子中,生成器函数每次都会生成一个新的值,并通过yield关键字返回该值。当我们再次调用next函数或进行下一次循环时,生成器函数会从上次返回的地方继续执行,直到再次遇到yield关键字。

2.2 生成器表达式

生成器表达式是一种更简洁的创建生成器的方法,它的语法形式与列表推导式类似,只不过是把方括号[]换成了圆括号()。
以下是一个生成器表达式的例子:

# 创建一个生成器表达式
gen_expr = (i ** 2 for i in range(5))

# 使用生成器表达式
for num in gen_expr:
    print(num)

在这个例子中,生成器表达式生成了一个0到4的平方数的生成器。我们可以像使用其他迭代器一样,使用next函数或for循环来获取生成器中的元素。
总结一下,无论是迭代器还是生成器,其本质都是遍历数据集并返回其中的元素。只不过生成器提供了一种更为简洁和灵活的方式,使我们可以更方便地创建和使用迭代器。在处理大数据集时,它们都是非常有用的工具。

三、最后

如果觉得本文对你有帮助记得 点个关注,给个赞,加个收藏,更多精彩内容欢迎查看。

标签:__,黑魔法,迭代,Python,self,生成器,iter,next
From: https://www.cnblogs.com/shiqianlong/p/17522256.html

相关文章

  • python一题多解:编写函数 change(str1) ,其功能是对参数 str1 进行大小写转换
    #习题6,3.编程题,p95#(2)编写函数change(str1),其功能是对参数str1进行大小写转换,#将大写字母转换成小写字母;#小写字母转换成大写字母;#非英文字符不转换。#类似p54,4.编程题(1),用分支语句实现。defchange1(str1):ret=""foriinrange(len(s......
  • PyCharm Pro 2023 mac|Python编辑开发
    Python是一种很流行的编程语言,主要用于计算机编程。Python程序语言是一个基于对象的脚本语言,在应用程序中,它使用自然语言作为标记,其中自然语言可以被翻译成机器语言。Python脚本具有高效、快速、可扩展性好的特点。通过在计算机上运行的脚本,可以在浏览器中打开各种文件和窗口,就像......
  • python
    第一章:你好Python初始PythonPython的起源19891991Python名字为什么选择Python优雅简单易学开发效率高适用面非常广泛什么是编程语言概念人类和计算机交流的一种专有领域语言工作原理将人类的想法,翻译成计算机可以识别的......
  • Python | datetime库函数的详解
    datetime是Python内置的日期时间处理库,它包含了处理日期、时间、时间间隔等的类和函数。datetime库可以从系统中获得时间,并以用户选择的格式输出。下面是datetime常用的类和函数以及它们的详细解释。datetime类datetime类是date和time两个类的结合体,表示一个具体的......
  • Python - Create Virtual Environment
    Step1:Installpython3.10-venvsudoaptinstallpython3.10-venv Step2:Installpython3-pip (necessary)sudoaptinstallpython3-pip Step3:Createvirualenvironmentpython3-mvenvzpython Step4:Activatethevenvcdzpythonsourcebin/activate......
  • Python 3.10 - Original Packages
    zzh@ZZHPC:~$pip3listPackage                Version------------------------------------apturl                 0.5.2bcrypt                 3.2.0blinker                1.4Brlapi      ......
  • 风变Python智能交易:玩中学、学中做,让投资更简单
    智能化时代,投资领域也在发生着巨大的变化,新的投资方式正在影响着投资者的实际行动。比如量化交易方式的出现,就成为了投资者一致信赖的选择。量化交易本身,也成为了当下以及未来每一个合格的投资者应该掌握的技能。风变还专门推出了Python智能交易课程,旨在以更严谨、专业的方式,助......
  • dmPython连接达梦数据库,查询含有特殊字符报错'gbk' codec can't decode byte 0xaa in
     解决方法,可以在应用连接字符串url连接属性加上local_code=1指定客户端字符编码方式。#local_code=1表示执行客户端的本地编码是UTF-8,否则默认是GBKdm_conn=dmPython.connect(user=dm_user,password=dm_password,server='localhost',port=5236,local_code=1) 参考网......
  • 微信公众号_爬虫_fiddler_抓包_python
    wechat_python/run.pyfromsqlalchemyimportColumn,Integer,String,create_enginefromsqlalchemy.ormimportsessionmakerfromsqlalchemy.ext.declarativeimportdeclarative_baseBase=declarative_base()classArticleInfo(Base):__tablename__=�......
  • python: Enum
     #encoding:utf-8#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python11#Datetime:2023/7/221:18#User:geovindu#Product:PyCharm#Project:pythonStudyDemo#File:CheckSort.py#explain:学习frome......