Python 生成器表达式

  • Post category:Python

Python 生成器表达式使用方法

Python中的生成器表达式(Generator Expression)是一种可以生成一个可迭代序列的表达式。与列表推导式一样,生成器表达式也是在方括号内放置一个表达式,但其中使用了小括号,且在左括号后面跟上关键字 yield 。与列表推导式不同的是,不需要在内存中创建列表,而是逐个地生成所需的值。这种逐个生成值的方式对于处理大量数据是有优势的,因为不必等待生成器生成所有值,而是在需要时逐个生成。

生成器表达式的语法格式如下:

( 表达式 for 变量 in 可迭代对象 )

下面是一个简单的示例,展示如何使用生成器表达式来生成一个列表:

lst = [i for i in range(10)]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

gen = (i for i in range(10))
# <generator object <genexpr> at 0x7fad44153990>

在上面的示例中,我们首先使用列表推导式生成了一个包含0至9的整数的列表,然后使用生成器表达式生成了一个相同的可迭代序列。需要注意的是,生成器表达式返回的是一个生成器对象(generator object),而不是一个列表。

对于生成器对象,我们可以使用 next() 函数逐个取出其中的元素。下面是一个演示如何使用生成器表达式来生成斐波那契数列的示例:

gen = (fib(i) for i in range(10))

def fib(n):
    a, b = 0, 1
    for i in range(n):
        yield a
        a, b = b, a + b

for i in gen:
    print(i, end=' ')
# 0 1 1 2 3 5 8 13 21 34

在上面的示例中,我们定义了一个生成器函数 fib() 来生成斐波那契数列。然后使用生成器表达式将 fib() 函数应用到0至9之间的整数,并将生成器对象赋值给变量 gen。最后使用 for 循环遍历 gen ,逐个取出生成器中的元素,并将其打印输出。

总之,Python的生成器表达式可以帮助我们更高效地处理大量数据,并且语法简单易懂。在实际应用中,可以与 filter()map() 等函数结合使用,实现更多复杂的数据处理操作。