python并发 惰性处理大型数据集

惰性计算是一种编程策略,它使得程序在何时执行计算的决定推迟到需要结果时才进行。这种策略的好处在于,它允许程序处理大规模数据或者需要大量计算的任务时节省内存和计算资源。

举例来说,当我们调用 Python 中的 range() 函数时,我们可以传递一个非常大的参数给它,比如 range(100000000),但是这并不会立即在内存中创建包含这么多数字的列表。相反,range() 函数返回一个迭代器,这个迭代器知道如何在需要时生成这么多的数字,而不会提前生成并保存所有的数字。这样做的好处是,即使处理的数据量很大,也不会立即耗尽系统的内存。

在惰性计算中,计算机首先接受你的指令并将其存储,但不会立即执行这些指令。相反,它会等到需要结果时才会执行这些命令。这意味着,如果你不要求计算机给出最终结果,它就不会执行任何中间步骤。这种行为使得程序可以更加灵活地处理数据,并且能够延迟计算,直到真正需要结果时才进行。

总的来说,惰性计算提供了一种高效地处理大规模数据和复杂计算任务的方法,它通过推迟计算来节省内存和计算资源,并且只在需要结果时才执行计算,从而提高了程序的性能和效率。

一些你需要知道的惰性函数 Map,range,filter,zip,iglob

Filter:接受一个序列,并限制其元素必须满足指定的条件

Zip:接受两个序列并返回tuple序列

Iglob: 延迟对文件系统的查询

理解迭代器

迭代器是python中所有可以遍历的数据类型的基类有,迭代过程由一个__iter__()来定义,如果一个类有这个方法,并返回一个带有__next__()方法的对象,那么我们就可以对它进行迭代

生成器:用来创建数据的函数

不必在内存中花费空间来保存列表

生成器表达式:在一行代码中包含无线的数据

当涉及到惰性计算、迭代器和生成器时,Python 提供了一些非常强大的工具,可以帮助你更有效地处理大规模数据集或者在处理数据时节省内存。

惰性计算和惰性函数

1. Map

map() 函数接受一个函数和一个可迭代对象,并返回一个将该函数应用于可迭代对象中每个元素的迭代器。

复制代码
result = map(func, iterable)
2. Filter

filter() 函数接受一个函数和一个可迭代对象,并返回一个仅包含满足指定条件的元素的迭代器。

复制代码
result = filter(func, iterable)
3. Zip

zip() 函数接受两个或多个可迭代对象,并返回一个将每个可迭代对象中对应元素组合成元组的迭代器。

复制代码
result = zip(iterable1, iterable2)
4. Iglob

iglob() 函数在文件系统中进行延迟查询,并返回一个生成文件名的迭代器。

复制代码
import glob

result = glob.iglob(pattern)

迭代器

迭代器是可以逐个访问元素的对象,它具有 __iter__() 方法,返回一个拥有 __next__() 方法的对象。

复制代码
class MyIterator:
    def __init__(self, data):
        self.index = 0
        self.data = data

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        value = self.data[self.index]
        self.index += 1
        return value

my_iter = MyIterator([1, 2, 3])
for item in my_iter:
    print(item)

生成器

生成器是用来创建数据的函数,它可以节省内存并允许你按需生成数据。

1. 生成器函数

生成器函数使用 yield 语句来返回值,并在每次调用时暂停执行,保持局部状态。

复制代码
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for value in gen:
    print(value)
2. 生成器表达式

生成器表达式是一种简洁的方式来创建生成器,类似于列表推导式,但使用圆括号而不是方括号。

复制代码
gen = (x for x in range(10) if x % 2 == 0)
for value in gen:
    print(value)

这些工具在处理大规模数据或需要惰性计算时非常有用,可以帮助你更高效地处理数据,并在需要时节省内存。

相关推荐
似水明俊德3 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
qq_417695053 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水3 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
Thera7774 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
yy我不解释4 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
炘爚5 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon5 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头5 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141595 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
Moksha2625 小时前
5G、VoNR基本概念
开发语言·5g·php