Python生成器(Generator)详解

  • Post category:Python

Python生成器(Generator)详解

什么是生成器?

Python中的生成器是一种特殊的迭代器,使用关键字yield来生成下一个值。与常规函数不同的是,当函数执行到yield语句时,函数会暂停并保存当前的状态,并产生一个值作为返回结果。下次调用该函数时,会从上一次暂停的地方继续执行。因此,生成器可以有效地节省内存,适用于处理大量数据。

使用生成器可以用for循环来迭代数据,例如:

def count_up_to(n):
    i = 1
    while i <= n:
        yield i
        i += 1

for num in count_up_to(5):
    print(num)

以上代码将会输出:

1
2
3
4
5

此外,生成器还可以用于生成无限大的数据集合,例如:

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def primes():
    num = 2
    while True:
        if is_prime(num):
            yield num
        num += 1

for p in primes():
    if p > 100:
        break
    print(p)

以上代码将会输出前100个素数。

生成器表达式

生成器表达式是一种简单的生成器语法,可以快速生成数据集合。与列表推导式类似,生成器表达式使用( )括起来,同时yield关键字可以省略。

例如,生成器表达式可以生成一个由字符串长度组成的列表:

str_list = ['hello', 'world', 'python', 'generator']
len_generator = (len(s) for s in str_list)
print(list(len_generator))  # 输出[5, 5, 6, 9]

总结

生成器是Python中非常强大和实用的特性,通过yield实现延迟计算,可以大大节省内存和提高性能。同时,生成器还可以用于处理无限大的数据集合。

以上是Python生成器的详解,包含了生成器的定义、用法、示例代码和生成器表达式。希望能对大家有帮助。