> For the complete documentation index, see [llms.txt](https://jarvisma.gitbook.io/pythonlearn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jarvisma.gitbook.io/pythonlearn/4.3-sheng-cheng-qi/chapter4.3.2.md).

# 4.3.2 生成器表达式

我们在文章开头的 1.1.1 节中介绍了数组推导，生成器表达式可以理解为惰性版的数组推导：

```python
array = [1, 2, 3]
[x * 2 for x in array] # 数组推导
(x * 2 for x in array) # 生成器表达式
```

两者的写法非常类似，只是把数组的大括号换成了圆括号，区别在于前者生成了一个新的数组，如果原来的数组占用 M 兆内存，现在两个数组就会占用 2 \* M 兆内存。而生成器是懒计算的，并不增加内存占用。

生成器表达式对于大容量的数组，或者无尽数组特别适用，比如可以写一个斐波那契数组：

```python
def fib():
    a = 0
    b = 1
    while True:
        yield b
        a, b = b, a + b

# fib() 可以被当成无尽队列，我们只取前 10 个元素        
for i, n in enumerate(fib()):
    if i < 10:
        print(n)
```
