0

再帰関数の戻りに奇妙な問題があります。temp_blocksの代わりに常に「None」を返します。彼は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
4

1 に答える 1

8

return明示的なステートメントが必要です。

if len(temp_blocks) == 1:
    return _searchblocks(temp_blocks[0].children, left_edge, right_edge)
    ^^^^^^

これがないと、関数はそれ自体を再帰的に呼び出し、結果を破棄してから、暗黙的にを返しますNone

于 2013-01-18T09:46:03.330 に答える