Python中yield和yield from

Python中yield和yield from

一、 yield

yield是实现生成器函数的关键字,yield可以实现在生成器函数执行过程中暂停并返回yield后跟的内容,下次调用生成器函数会从上次暂停的地方继续执行。使用next

def simple_generator():
    yield 1
    yield 2
    yield 3

gen = simple_generator()
print(next(gen))  # 输出: 1
print(next(gen))  # 输出: 2
print(next(gen))  # 输出: 3
# 再次调用 next(gen) 将会抛出 StopIteration 异常

yield可以用于惰性求值,对于处理大规模数据集和无限集而言比较有用。

def infinite_counter(start=0):
    while True:
        yield start
        start += 1

counter = infinite_counter(5)
for _ in range(5):
    print(next(counter))  # 输出: 5, 6, 7, 8, 9

next函数是专门用于生成器迭代器的,对于可迭代对象并不能直接使用next()函数,而是需要先使用iter()函数将list转换为一个iterator
在这里插入图片描述

二、 yield from

yield from是yield的一个扩展用法,他的作用是从可迭代对象、生成器中返回。作用是简化生成器的嵌套调用。

def generator():
    yield from iterable_or_generator

等价于

def generator():
    for value in iterable_or_generator:
        yield value

示例

def gen1():
    yield 1
    yield 2

def gen2():
    yield from gen1()
    yield 3

for val in gen2():
    print(val)

输出如下:

1
2
3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值