python之生成subgen的使用权

描述

读者

查看需要有一定的基础python,概念部分建议 阅读经典书籍: 百万的python 或者w3c school 或者 菜鸟教程

系列

这是一个系列,如遇到不明白的部分,可以回看前面的文章

功能

通过 gen gen 的使用权,即在 subgen() 时,subgen 的使用权,把的价值传递给 gen 的使用方,可以直接控制生成方的调用,生成 subgen 的使用权。亚根终止。

重复:如果yield from 后面是str list tple set map range,直接next()

例子说明

yield from的执行流程,并制作了一个模拟fake_yield_from,

源是c语言所写,可以自己研究

import inspect


def subgen():
res = yield 11
return res


def gen():
res = yield from subgen()
return res


def fake_yield_from(f):
# 模拟yield from的功能
result = None
if inspect.isgenerator(f):
try:
result = f.send(None)
except StopIteration as e:
result = e.value
else:
result = next(iter(f))
return result


def gen_fake():
res = yield fake_yield_from(subgen())
return res


def print_value(f, args):
try:
b = f.send(args)
except StopIteration as e:
print(f'{f.__name__}返回值 {e.value}')
return e.value
else:
print(f'{f.__name__}接收 {b}')


gs = [gen(), gen_fake()]
for g in gs:
print_value(g, None)
print_value(g, 2)

'''
结果:
gen接收 11
gen返回值 2
gen_fake接收 11
gen_fake返回值 2
'''



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分