递归函数中的python生成器

2024-09-27 00:20:22 发布

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

我看了很多帖子,还是不太明白。下面的代码在代码中嵌入的sql文本中打印出这个查询的外层。在

K.a
K.b
I
J
K
1
2

我不清楚当递归调用函数时,如何获取内部层。我在https://github.com/andialbrecht/sqlparse/blob/master/examples/extract_table_names.py之后设计了这个图案,它非常相似,可以工作。提前谢谢。在

^{pr2}$

Tags: 代码https文本githubmastercomsqlextract
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:22

在递归调用后的循环中执行的类型检查将测试错误对象的类型:

    if is_subselect(item):
        for x in extract_from_part(item):
            # next line should check type(x) rather than type(item)
            if type(item)  in(sqlparse.sql.IdentifierList,sqlparse.sql.Identifier):
                yield x

不过,这种类型检查是不必要的,因为非递归的情况只会产生Identifier或{}项。所以,只需去掉这行代码(并取消对下面的yield)的缩进。在

虽然这不是导致此问题的原因,但我也建议使用isinstance,而不是直接比较类型:

^{pr2}$

相关问题 更多 >

    热门问题