python递归生成器fai

2024-07-04 07:51:48 发布

您现在位置:Python中文网/ 问答频道 /正文

json对象和嵌套的dictve列表。。我想搜索里面所有的“foo”键。 我试图做递归生成器,但函数在第二次调用parse dunno时失败了为什么,我甚至只看到一次'in'输出。看来解释器第二次都不进去了。。帮我明白我哪里错了?在

def parse(d,key):
    print('in')
    if type(d)==type({}):
        if key in d:
            yield d[key]
        for k in d:
            parse(d[k],key)
    if type(d)==type([]):
        for i in d:
            parse(i,key)

Tags: 对象key函数injson列表forif
1条回答
网友
1楼 · 发布于 2024-07-04 07:51:48

发电机的工作方式不像协同程序。如果生成器函数递归地调用自身,则递归调用将生成另一个生成器对象。控件不会像在Lua中那样重新输入生成器代码,yield不会一次挂起整个生成器调用堆栈。必须迭代返回的生成器对象并生成其元素:

def parse(d,key):
    print('in')
    if type(d)==type({}):
        if key in d:
            yield d[key]
        for k in d:
            for item in parse(d[k],key):
                yield item
    if type(d)==type([]):
        for i in d:
            for item in parse(i,key):
                yield item

在Python3.3中,添加了委派给子生成器的yield from语法,因此代码将简化为以下内容:

^{pr2}$

这样做的优点是可以自动处理sendthrow,以及在子生成器上显式循环的一堆边缘情况。在

相关问题 更多 >

    热门问题