奇怪的Python行为递归

Chr*_*ian 0 python recursion function

返回递归函数我有一个奇怪的问题.它总是返回'None'而不是temp_blocks.他会在else-case中编写temp_blocks(块列表,而不是None),但是如果我调用该函数,它似乎不会返回列表blocks = _searchblocks(roots, left_edge, right_edge).这是一个常见问题,还是我的错?

def _searchblocks(blocks, left_edge, right_edge):
    temp_blocks = []
    for block in blocks:
        if np.any(block.left_edge >= left_edge) \
        and np.any(block.right_edge <= right_edge):
            temp_blocks.append(block)

    if len(temp_blocks) == 1:
        _searchblocks(temp_blocks[0].children, left_edge, right_edge)
    else:
        print(temp_blocks)
        return temp_blocks
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 8

您需要一个明确的return声明:

if len(temp_blocks) == 1:
    return _searchblocks(temp_blocks[0].children, left_edge, right_edge)
    ^^^^^^
Run Code Online (Sandbox Code Playgroud)

如果没有这个,你的函数会递归调用自己,丢弃结果,然后隐式返回None.