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)

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

相关推荐
心情好的小球藻2 分钟前
Python应用进阶DAY9--类型注解Type Hinting
开发语言·python
都叫我大帅哥3 分钟前
LangChain加载HTML内容全攻略:从入门到精通
python·langchain
惜.己14 分钟前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
Y40900120 分钟前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记
都叫我大帅哥2 小时前
Python的Optional:让你的代码优雅处理“空值”危机
python
曾几何时`4 小时前
基于python和neo4j构建知识图谱医药问答系统
python·知识图谱·neo4j
古月-一个C++方向的小白6 小时前
C++11之lambda表达式与包装器
开发语言·c++
写写闲篇儿6 小时前
Python+MongoDB高效开发组合
linux·python·mongodb
沐知全栈开发6 小时前
Eclipse 生成 jar 包
开发语言
杭州杭州杭州7 小时前
Python笔记
开发语言·笔记·python