Python生成器的方式
时间: 2023-11-05 14:08:04 浏览: 87
Python中生成器是一种特殊的迭代器,可以用来生成一个序列,而不需要一次性将所有元素都存储到内存中。生成器可以通过函数、生成器表达式等方式来创建。
1. 使用函数生成器
函数生成器可以通过 yield 语句来生成一个序列。当函数被调用时,它会返回一个生成器对象,而不是执行函数体内的所有代码。当我们使用 next() 函数调用生成器时,函数会从上次调用 yield 语句处继续执行,直到遇到下一个 yield 语句或函数结束。
例如,下面是一个简单的函数生成器,用来生成斐波那契数列:
```python
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
```
当我们调用该生成器时,它会返回一个生成器对象,然后我们可以使用 next() 函数来获取序列中的每一个元素:
```python
f = fibonacci()
print(next(f)) # 0
print(next(f)) # 1
print(next(f)) # 1
print(next(f)) # 2
print(next(f)) # 3
```
2. 使用生成器表达式
生成器表达式是一种更简单、更紧凑的生成器创建方式,类似于列表推导式。它的语法形式为:(expression for variable in iterable if condition)。其中,expression 是生成器元素的计算表达式,variable 是迭代变量,iterable 是可迭代对象,condition 是可选的条件表达式。
例如,下面是一个使用生成器表达式来生成一个列表中所有偶数的生成器:
```python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = (x for x in numbers if x % 2 == 0)
```
当我们调用该生成器时,它会返回一个生成器对象,然后我们可以使用 next() 函数来获取序列中的每一个元素:
```python
print(next(even_numbers)) # 2
print(next(even_numbers)) # 4
print(next(even_numbers)) # 6
print(next(even_numbers)) # 8
print(next(even_numbers)) # 10
```
阅读全文