yield表达式形式的应用

本文详细介绍了Python中yield表达式的使用,包括基本格式、如何给yield传值以及两个具体的应用示例:吃货函数和模拟Linux grep命令。在吃货函数示例中,展示了如何通过外部函数提供yield所需值。而在模拟grep命令的示例中,通过多个函数协同工作,实现了递归查找文件并检测内容的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本格式

x = yield 把yield的接收值,赋值给x

def foo():
    while True:
        x = yield   # 函数执行到yield处,暂停,yield后面没有任何返回值,默认返回yield None
        print("x's value is ", x) # next执行,打印出x的值,yield 没有接收任何传值,默认接收None,并赋值给x,
        # 然后继续执行,返回循环体,又执行到yield处,暂停,返回None
g = foo()
print(next(g))
print(next(g))
# 运行结果如下:
# None
# x's value is  None
# None

如何给yield传值

带有关键字yield的函数的执行结果就是生成器,假设为g, 调用g.send(value)方法,就可以给yield传值。g.send(None)就是给yieldNone, 相当于没传,也就等同于next(g) 的执行效果。
注意,g.send(value) 的传值方式是基于一个暂停的位置。也就是说生成器函数必须先执行到yield处,暂停在那里,给yield传值,然后执行next(g)。因此,在使用g.send(value) 给yield传值前,要进行初始化:next(g) 或者g.send(None)
我们可以用装饰器来做生成器的初始化:

def init(g_func):   #定义装饰器函数
    def wrapper(*args, **kwargs):
        g = g_func(*args, **kwargs)
        next(g)     # 用next(g)将生成器函数暂停到yield处,以完成初始化
        return g
    return wrapper

@init
def foo():
    while True:
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值