定义生成器函数
def sync_generator(n):for i in range(n):yield ipython复制代码
- def sync_generator(n):定义了一个名为- sync_generator的函数,它接受一个参数- n。
- for i in range(n):在函数内部,有一个- for循环,它遍历从- 0到- n-1的整数序列。
- yield i:在循环的每次迭代中,- yield关键字会返回一个值给调用者,并且暂停函数的执行。当下次迭代开始时,函数会从上次- yield的地方继续执行。
使用生成器
for value in sync_generator(5):print(value)
- for value in sync_generator(5):这行代码调用了- sync_generator函数,并传入参数- 5。由于- sync_generator是一个生成器函数,它返回一个迭代器对象。- for循环会遍历这个迭代器对象。
- 在每次循环迭代中,sync_generator函数会执行到yield i,返回一个值i给for循环中的value变量。然后,函数会暂停执行,直到下一次迭代开始。
- print(value):这行代码打印当前迭代中- value的值。
执行流程
- 调用 sync_generator(5),函数开始执行,n被设置为5。
- 进入 for循环,i被设置为0。
- 执行 yield 0,返回0给调用者,函数暂停执行。
- for循环接收返回值- 0,赋值给- value,并执行- print(value),打印- 0。
- for循环请求下一个值,- sync_generator函数从上次暂停的地方继续执行,- i被设置为- 1。
- 重复步骤 3-5,直到 i达到4,函数执行完毕。
内存效率
生成器的一个关键优势是它们在迭代过程中只占用恒定的额外内存(不考虑迭代元素本身占用的内存)。这是因为它们一次只生成(或“yield”)一个值,而不是在内存中构建整个序列。这对于处理大量数据或无限序列特别有用。
在这个例子中,尽管我们迭代了一个包含5个元素的序列,但生成器函数本身并没有在内存中存储整个序列。它只是每次迭代时生成一个值,然后立即返回给调用者。