的全文有2424个字。据估计,学习时间为7分钟
来源:Unsplash
如何使用生成器来减少内存使用并使Python代码运行得更快对于您的“代码生命”来说是生死攸关的事情
然而,当我第一次开始学习Python生成器时,我不知道它最终会变得如此重要。然而,当需要编写自定义函数时,它在机器学习过程中起着不可替代的作用。生成器函数允许您声明类似迭代器的函数,允许程序员以快速、简单和简洁的方式创建迭代器迭代器是一个可以迭代的对象。它用于抽象数据容器,使其行为像迭代对象。常见迭代对象的一些例子是字符串、列表和字典生成器看起来很像一个函数,使用产量作为关键字而不是返回。为了更好地理解,我们可以看一个例子:
def generate _ numbers:
n = 0
,而n < 3:
产生n
n+= 1
这是发生器函数调用时,它返回一个生成器对象:
>。>;>;numbers = generate _ numbers
& gt。>;>;类型(数字)
& lt;类别“生成器”>。
对于理解状态如何封装在发生器函数体中很重要您可以使用内置的next函数来单步执行:
>。>;>;next _ number = generate _ number s
& gt。>;>;next(next _ number)
0
& gt。>;>;next(next _ number)
1
& gt。>;>;Next(next _ number)2
如果在末尾继续调用next,会发生什么情况?
StopIteration是一种内置的异常类型,一旦生成器停止执行yield语句,它就会自动触发这是循环停止的信号。
来源:UN splash
yield语句
其主要工作是以类似于return语句的方式控制生成器函数的流量
在调用生成器函数或使用生成器表达式时返回一个称为生成器的特殊迭代器您可以通过将该生成器分配给变量来使用它
当调用生成器上的特殊方法(如next)时,函数中的代码将被执行为yield语句当执行到达Python代码中的yield语句时,程序将暂停函数的执行,并将生成的值返回给调用方(相反,return完全停止了函数的执行)
当一个函数被挂起时,它的状态被保存在熟悉了Python的生成器之后,让我们在内存使用和代码执行时间方面比较一下普通方法和使用生成器的方法。
问题陈述
假设我们必须遍历一大串数字(例如,100000000)并将所有偶数方块存储在单独的列表中
常用方法
import memory _ profiler import timedefcheck _ even(numbers):even = num in numbers:if num % 2 = = 0:even . append(num * num)返回even if _ _ name _ _ = ' _ _ main _ _ ':m1 = memory _ profiler . memory _ usage t1 = time . clock cubes = check _ even(范围(1000000000))T2 = time . clock km2 = memory _ profiler memory。发电机只能按需工作,这被称为惰性评估工作。这意味着他们可以节省CPU、内存和其他计算资源
来源:Unsplash
今天,我们学习了如何使用python的生成器来减少内存使用并使代码执行更快这种方法的优点是生成器不会将所有结果存储在内存中,而是会立即生成它们,因此它只在我们请求结果时使用内存。
生成器还可以提取编写迭代器所需的许多模板代码,因此也有助于减少代码量。
来试试,你会惊喜的。
评论表扬关注
我们分享人工智能学习和发展干货
。如果您需要重新打印,请在后台留言并遵守重新打印规范< br>