,生成允许跨过它们的iterable或object被认为是一项繁重的任务。但是,在Python中,这个痛苦任务的实现变得非常顺利。因此,让我们继续深入了解Python中的生成器。
,生成允许跨过它们的iterable或object被认为是一项繁重的任务。但是,在Python中,这个痛苦任务的实现变得非常顺利。因此,让我们继续深入了解Python中的生成器。
这里列出了本文中涉及的所有主题:
什么是生成器?使用生成器正态函数与使用生成器函数的优点使用生成器函数和循环生成器表达式生成Fibonacci级数生成数
的用例,让我们开始吧。:)
Python中的生成器是什么
“生成器基本上是返回可遍历对象或项的函数。这些函数不会同时生成所有项,而是一次生成一个项,并且仅在需要时才生成。无论何时包含for语句来迭代一组项,都会运行一个生成器函数。生成器也有许多优点。
使用生成器
的优点没有在Python中使用生成器,生成iterable是非常困难和冗长的。
生成器很容易实现,因为它们自动实现了iter()、next()和StopIteration,否则需要显式地指定的。
内存保存为在需要时生成的项,这与普通的Python函数不同。当您需要创建大量迭代器时,这个事实变得非常重要。这也被认为是生成器的最大优势。
可用于生成无限多个项。
它们还可用于流水线操作
正常函数与生成器函数:
生成器在Python中的创建方式与创建正常函数的方式相同使用“def”关键字。但是,生成器函数使用yield关键字而不是return。这样做是为了通知解释器这是一个迭代器。不仅如此,生成器函数在调用next()函数时运行,而不是像普通函数那样按其名称运行。考虑下面的示例以更好地理解它:
示例:
def func(a):产量aa=[1,2,3]b=功能(a)返回a函数(a)
输出:[1,2,3]
如果您查看上面的示例,您可能会想知道,当正常函数也返回相同的输出时,为什么要使用生成器函数。所以让我们继续看看如何在Python中使用生成器。
使用生成器函数:
如前所述,Python中的生成器一次生成一个iterable。请看下面的示例:
示例:
def myfunc(a):当a>=3时:产量aa=a 1打印(b)下一步(b)
当您执行以下函数时,您将看到以下输出:
输出:4
这里,返回了一个满足while条件的iterable对象。执行后,控件将被传输到调用方。如果需要更多的项,需要通过调用next()函数
再次执行同一个函数下一个(b)
输出:5
在进一步执行时,函数将返回6、7等。Python中的生成器函数将自动实现“iter”和“next”方法。因此,只需使用next()方法就可以迭代对象。当项生成应该终止时,生成器函数在内部实现stopietition,而不必担心调用方。下面是另一个示例:
示例:
a=2当a>=0时:a-=1b=myfunc(甲)接下来(b)
输出:
上图显示了我们的程序执行所需的次数。如果您尝试再次调用下一个函数,它将返回一条描述StopIteration已实现的消息。如果尝试使用普通函数执行此操作,则返回的值不会更改或迭代。请看下面的示例:
示例:
def z():产量n产量np=z()下一个(p)
输出:
带循环的生成器:
如果您希望立即执行相同的函数,可以使用“for”循环。此循环有助于迭代对象,并在所有实现之后执行StopIteration。
示例:
def z():产量nn=n 3产量n打印(x)
输出:
14
还可以指定表达式来生成可iterable对象。
生成器表达式:
还可以使用表达式和for循环来生成迭代器。这通常使这一代人很容易相处。生成器表达式类似于列表理解,与lambda函数一样,生成器表达式创建匿名生成器函数。
查看以下示例:
示例:
a=range(6)print(“列表理解”,end=':')打印(b)c=(x 2代表x in a)对于y in c:打印(y)
输出:
列表理解:[2,3,4,5,6,7]
生成器表达式:
at 0x000016362944480>
2 3 4 5 6
,如您所见,在上述输出中,第一个表达式是在[]括号内指定的列表理解。列表理解一次生成完整的项目列表。下一个是生成器表达式,它一次只返回一个相同的项。它是用()括号指定的。
生成器函数也可以在其他函数中使用。例如:
示例:
a=范围(6)c=(x 2代表x in a)打印(min(c))
输出:
生成器表达式2
当上述表达式应用于
用例的值时,上述程序打印最小值:
让我们使用Python中的生成器来:
生成斐波纳契级数生成数字生成斐波纳契级数:
斐波纳契级数万事通是一系列数字,其中每个数字是前两个数字的和。前两个数字是0和1。下面是生成斐波那契级数的生成器程序:
示例:
def fibo():如果是真的:第一,第二=第二,第一 第二对于fibo()中的x:打破b=(x代表a中的x)打印(b)打印(y)
输出:
0 1 2 3 4 5 6 7 8 9
示例:
a=范围(2,10,2)打印(b)对于y in b:打印(y)
输出:
at 0x000001CBE1623138>2 4 6 8
以上程序已返回从2到10的偶数。这将使我们结束本文关于Python中生成器的讨论。我希望你已经理解了所有的主题。
确保你尽可能多的练习和恢复你的经验。
有一个问题给我们吗?请在“Generators in Python”博客的评论部分提到它,我们将尽快给您回复。
要深入了解Python及其各种应用程序,您可以注册参加具有全天候支持和终身访问的实时Python认证培训。