Python重构列表构建代码

示例

假设您具有复杂的代码,该代码通过从空白列表开始并重复添加到列表中来创建并返回列表:

def create():
    result = []
    # 逻辑在这里...
    result.append(value) # 可能在几个地方
    # 更多逻辑...
    return result # 可能在几个地方

values = create()

当用列表推导替换内部逻辑不可行时,可以将整个函数转换为就地生成器,然后收集结果:

def create_gen():
    # 逻辑...
    yield value
    # 更多逻辑
    return # 当然,如果在函数末尾不需要

values = list(create_gen())

如果逻辑是递归的,则用于yield from将来自递归调用的所有值包括在“扁平化”结果中:

def preorder_traversal(node):
    yield node.value
    for child in node.children:
        yield from preorder_traversal(child)