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 的值。

执行流程

  1. 调用 sync_generator(5),函数开始执行,n 被设置为 5
  2. 进入 for 循环,i 被设置为 0
  3. 执行 yield 0,返回 0 给调用者,函数暂停执行。
  4. for 循环接收返回值 0,赋值给 value,并执行 print(value),打印 0
  5. for 循环请求下一个值,sync_generator 函数从上次暂停的地方继续执行,i 被设置为 1
  6. 重复步骤 3-5,直到 i 达到 4,函数执行完毕。

内存效率

生成器的一个关键优势是它们在迭代过程中只占用恒定的额外内存(不考虑迭代元素本身占用的内存)。这是因为它们一次只生成(或“yield”)一个值,而不是在内存中构建整个序列。这对于处理大量数据或无限序列特别有用。

在这个例子中,尽管我们迭代了一个包含5个元素的序列,但生成器函数本身并没有在内存中存储整个序列。它只是每次迭代时生成一个值,然后立即返回给调用者。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值