2013-01-18 50 views
0

我有一個遞歸函數返回一個奇怪的問題。它總是返回'None'而不是temp_blocks。他會在其他情況下寫入temp_blocks(塊列表,而不是無),但如果我調用函數blocks = _searchblocks(roots, left_edge, right_edge),它似乎不會返回列表。這是一個常見問題,還是我的錯?奇怪的Python行爲遞歸

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 

回答

8

你需要一個明確的return聲明:

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

不這樣做,你的函數遞歸調用自己,丟棄結果然後含蓄地返回None