Python yeild关键字
定义生成器函数
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个元素的序列,但生成器函数本身并没有在内存中存储整个序列。它只是每次迭代时生成一个值,然后立即返回给调用者。