定义生成器函数
def sync_generator(n):for i in range(n):yield i
python复制代码
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个元素的序列,但生成器函数本身并没有在内存中存储整个序列。它只是每次迭代时生成一个值,然后立即返回给调用者。