Python 中的惰性求值2024 年 8 月 29 日 | 5 分钟阅读 在本教程中,我们将学习 Python 中的惰性求值,并讨论 Python 为我们优化了多少代码。我们还将学习如何编写惰性函数/类。 惰性求值是一种将表达式的计算推迟到实际需要其值时的技术。当计算表达式的值非常耗时,并且该值可能仅在某些情况下需要时,它会非常有用。这是一种优化代码的策略。例如 - 我们有一个简单的表达式 sum=2+3; Python 会理解该表达式并得到结果 sum = 5; 这个计算过程称为求值。在这种情况下,求值会立即进行;我们也可以称之为严格求值。 另一方面,非严格求值也称为惰性求值。主要区别在于惰性求值不会立即计算表达式,而是在我们需要结果时计算。例如 - 一个懒惰的学生只会在需要提交作业时才完成作业。 然而,在编程中,懒惰并非坏事。它可以提高代码效率,节省大量资源。Python 的许多内置方法都支持惰性求值,这可以优化代码。即使您不知道惰性求值的概念,您也很可能熟悉其中许多方法。 惰性求值函数让我们来看看 Python 中惰性求值的函数。
Python 通常会立即计算表达式,但在某些情况下,惰性求值可以用于优化代码和提高性能。例如,请考虑以下代码片段 - 您预计它需要多长时间才能执行? 给定的代码片段在 Python 中创建了一个列表,这会导致列表中的所有元素立即被计算。即使只需要一小部分元素,这也会导致更长的执行时间。换句话说,Python 在这种情况下不使用惰性求值,这会影响性能。使用惰性求值技术可以提高性能和优化代码。 Python3 允许使用 range() 函数以更节省内存和时间的方式遍历列表。在 Python2 中,range(5) 会返回一个包含 5 个元素的列表。随着列表大小的增加,会使用更多内存。 示例 - 然而,range(5) 返回一个 range 类型,这个对象可以被迭代以生成一系列数字。使用 range() 的一个关键好处是,无论范围大小如何,结果对象的大小都保持不变。 这是因为 range() 实际上并不在内存中存储所有整数。相反,它只存储开始、停止和步长值,并在需要时计算序列中的每个整数。这种方法有时被称为惰性求值或按需计算。 迭代器和生成器是 Python 中相关的概念,但它们之间存在一些重要的区别。总的来说,迭代器比生成器更通用的概念,可以被认为是一个生成一系列值的对象。 在 Python 中,迭代器是一个实现 __next__() 和 __iter__() 方法的对象。__next__() 方法返回序列中的下一个值,而 __iter__() 返回迭代器对象本身。当迭代器耗尽且不再生成值时,它会引发 StopIteration 异常。 另一方面,生成器是使用函数创建的一种特定类型的迭代器。生成器函数看起来像一个普通函数,但它使用 yield 关键字而不是 return 来返回值。每次遇到 yield 关键字时,函数都会返回当前值并保存其状态,以便稍后从该点恢复。 生成器是内存高效且计算高效地生成值序列的强大工具。通过使用惰性求值并在需要时生成值,生成器可以在不占用大量内存的情况下处理非常大的数据序列。
zip() 方法合并两个可迭代对象并返回元组序列。让我们看下面的例子。 示例 -
open() 方法用于正常打开文件。它不会读取整个文件并将其存储在内存中,而是返回一个可迭代的文件对象。它可以读取大量内存中的大文件。 示例 -
x = map(lambda x:x*2, [1, 2, 3, 4, 5]) 不占用任何内存空间。但是当我们执行 list(x) 时,它会打印所有值并占用内存空间。 map 对象也是一个惰性对象,可以被迭代。计算 x*2 只会在每次循环中对 1 个项目进行。当你执行 list(x) 时,你基本上是一次性计算所有值。如果你只想迭代 map 对象,你不必执行 list(x)。 示例 - 如何编写惰性求值函数/类正如我们已经讨论过的,惰性求值的一个主要部分就是生成器。我们可以将函数写成生成器。 惰性函数 - 生成器 结论本教程包括了惰性求值的基础概念及其工作原理。惰性求值可以成为优化代码和提高性能的强大技术,但它并非总是必要或合适的。在代码中实现惰性求值之前,仔细权衡取舍和潜在的好处非常重要。 |
语言 什么是回文?回文是指即使数字和字母颠倒也保持不变的数字或字母。例如:121、11、414、1221、74747 是回文数。MOM、DAD、MADAM、REFER 是回文词。JAVATPOINT、PROGRAM、JAVA 不是回文词。回文...
阅读 2 分钟
Python 中的可迭代对象是没有、一个或多个元素的 Python 对象。可迭代对象能够根据用户的需要返回其元素。由于此功能,我们可以使用 Python for 循环遍历可迭代对象。实际上,range() 方法...
阅读 4 分钟
简介:在本教程中,我们将学习 Python Selenium 中的 forward_driver 方法。Selenium 模块用于使用 Python 进行自动测试。Selenium Python 绑定提供了一个简单的 API。使用 Selenium WebDriver,此 API 用于编写功能或验收测试。Web……
阅读 3 分钟
简介:在本文中,我们将讨论 Deepchecks:测试机器学习模型 (Python)。一个成功且可靠的学习系统版本必须通过各个程度的成熟。它从记录系列和整理、准确分割事实以及正确地对版本进行教学、测试和验证开始...
阅读 6 分钟
在本教程中,我们将学习 Python 中的向量化。如今的系统需要处理大量数据。与 C/C++ 等其他语言相比,Python 处理大型数据集的速度较慢。因此,我们需要一种向量化技术。让我们了解更多...
阅读 8 分钟
自定义解析器行为 Python 模块 'configparser'。利用 ConfigParser 模块来监督任何应用程序的用户文档和文件。文档格式被协调成段落;每个部分都可以包含用于协调数据的键值对。还支持使用 Python 格式化字符串技术进行键值插入...
阅读 8 分钟
在接下来的教程中,我们将学习如何使用 Python 编程语言中的 Tkinter 库创建一个标准的单位转换器。但在我们开始构建项目之前,让我们简要讨论一下单位转换和一些相关方面。理解单位...
阅读 26 分钟
Django 是一个流行的 Web 框架,它建立在 Python 编程语言之上。它为开发人员提供了强大的工具集,使他们能够快速构建健壮、可扩展和安全的 Web 应用程序。Django 的主要功能之一是它的...
阅读 3 分钟
| Python 为什么不支持指针。在本教程中,我们将了解 Python 中的指针,并看看 Python 为什么不支持指针概念。我们还将了解如何在 Python 中模拟指针。下面是对指针的介绍,适合那些不熟悉......
阅读9分钟
NumPy 库用于在 Python 中创建白色空白图像的数字表示,以创建白色图像。此操作通常用作各种图像处理任务的起点,或作为创建图形和插图的画布。NumPy,缩写为...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India