迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 生成器推导

作者:迹忆客 最近更新:2023/06/01 浏览次数:

生成器推导是在 python 中创建生成器的一种聪明而有效的方法。 它是定义生成器的单行规范,对于理解该语法以高效编码至关重要。

在本文中,我们将学习 python 的生成器和生成器推导以及示例。


Python 中的生成器

Python 中的生成器是返回可迭代或遍历对象的函数,用于创建一次遍历项目的迭代器。 生成器是使用预定义的 iter() 和 next() 函数创建迭代器的一种简单易行的方法,以跟踪内部状态,它还负责处理 StopInteration 异常。

虽然在 Python 中创建迭代有很多复杂性,但您必须定义和实现 iter() 和 next() 函数。 这是一个漫长的过程,但多亏了发电机。

让我们看一个 Python 生成器的例子。

# A simple generator function
def my_gen():
    n = 1
    print(f'This is line number {n}')
    # generator function always contains the 'yield' Keyword
    yield n

    n += 1
    print(f'This is line number {n}')
    yield n

    n += 1
    print(f'This is line number {n}')
    yield n

print(my_gen())

输出:

<generator object my_gen at 0x00000150EA43E448>

我们在上面的函数中使用了 yield 将值转换为生成器。 当我们打印 my_gen() 函数时,我们得到了可用于迭代生成器的函数对象。

让我们看一个迭代生成器的例子。

def even_nums():

    # create generator
    for i in range(11):
        if(i%2==0):
             yield i

print("This is the generator object of the generator function:",even_nums())

# iterate over the generator function
print("\nEven number from 0 to 11")
for i in even_nums():
    print(i, end= ", ")

输出:

This is the generator object of the generator function: <generator object even_nums at 0x05ACC2D0>

Even number from 0 to 11
0, 2, 4, 6, 8, 10,

Python生成器推导

生成器推导类似于 Python 中的列表推导; 但是,括号和方括号将它们区分开来。 我们可以使用 Python 中的生成器理解轻松创建一个简单的生成器,其工作方式类似于创建匿名函数的 lambda 函数。

生成器推导和列表推导之间的区别在于生成器理解同时创建一个项目,而列表推导同时创建整个列表。 生成器理解速度更快且内存效率更高。

让我们看一个 Python 中生成器推导的例子。

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x**2 for x in range(1,6))

print(gen) # return --> generator object

# iterate over the generator 'gen'
for i in gen:
    print(i, end=", ")

输出:

<generator object <genexpr> at 0x00000150EA43EC48>
1, 4, 9, 16, 25,

在上面的代码示例中,生成器表达式已按需生成所需的结果,但不是立即生成。 它返回生成器的对象,我们稍后使用该对象使用 for 循环遍历生成器。

您可以使用 next() 函数按顺序打印生成器的每个值,因为生成器会处理值的顺序和状态。

# generator comprehension in python
# take the square of each number from 1-6 and store it in 'gen'
gen = (x**2 for x in range(1,6))

# next()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

输出:

1
4
9
16
25

如您所见,我们正在使用 next() 获取按需值,它会处理值的序列,因为我在每个 next() 函数之后获取下一个值。

上一篇:在 Python 中检查生成器是否为空

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中检查生成器是否为空

发布时间:2023/06/02 浏览次数:139 分类:Python

本文讨论如何在 Python 中检查生成器是否为空。在 Python 中检查生成器是否为空是指检查路径以确保它为空。

在 Python 中使用 PhantomJS

发布时间:2023/06/02 浏览次数:107 分类:Python

这篇 Python 文章将研究 PhantomJS 以及我们如何将它与用于 Python 编程的 Selenium Web 自动化模块一起使用。 我们还将研究为什么它比其他可用的自动化 Web 驱动程序更有用。

Python 查询 DynamoDB

发布时间:2023/06/02 浏览次数:127 分类:Python

本文将讨论如何使用 python 查询 Amazon DynamoDB。 我们还将讨论 Boto3 是什么以及它为什么需要查询 DynamoDB。

Python Crc32 介绍

发布时间:2023/06/02 浏览次数:182 分类:Python

本篇文章将介绍使用 Python 中的 binascii 或 zlib 库计算数据的 crc32。Python CRC32 。CRC32 是数据的校验和,也称为循环冗余校验,用于检查数据的数字传输中存在的错误。

在 Python 中使用 Luhn 算法验证数字

发布时间:2023/06/02 浏览次数:164 分类:Python

这篇文章解释了用 Python 编写 Luhn 算法并根据算法验证数字。在 Python 中使用 Luhn 算法验证数字 Luhn 算法验证器有助于检查合法数字并将其与不正确或拼写错误的输入分开。

Python - 匹配多行文本块的正则表达式

发布时间:2023/06/02 浏览次数:192 分类:Python

本文讨论了在多行字符串中搜索特定模式的方法。 该解决方案折衷了已知和未知模式的几种方法,并解释了匹配模式的工作原理。编写正则表达式以匹配多行字符串的原因

在 Python 中使用正则表达式捕获组

发布时间:2023/06/02 浏览次数:78 分类:Python

本篇文章介绍了如何借助 Python 中的正则表达式捕获组。 我们还将了解这些群体以及我们如何捕获它们。 让我们开始吧。在 Python 中使用正则表达式捕获组

Python 正则表达式转义

发布时间:2023/06/02 浏览次数:64 分类:Python

这篇文章是关于 Python 正则表达式转义的。 此外,我们将介绍 Python 正则表达式转义以及如何通过适当的示例代码使用它,以及 Python 正则表达式的多种用途。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便