2011-12-18 100 views
0

爲什麼這個遞歸函數不斷返回多個字典而不是一個字典。python函數返回多個字符而不是一個

def retFiles(dir): 
    data = {} 
    root = set() 
    os.chdir(dir) 
    cwd = os.getcwd() 
    for i in os.listdir(cwd): 
     if os.path.isfile(i): 
      data.setdefault(i, set()) 
      root.add(os.path.relpath(dir).replace("\\", "/")) 
      data[i] = root 
     else: 
      preisci(i) 
    print(data) 
+10

呃......該函數不返回* ANYTHING * ... – 2011-12-18 05:40:34

+0

是否最後一行(print(data))應該表示通常將從該方法返回的**會**? – 2011-12-18 05:43:54

回答

1

實際上,爲什麼該方法會返回一個列表(如果print(data)行實際上應該是返回值),這是有意義的。

if os.path.isfile(i): 
     data.setdefault(i, set()) 
     root.add(os.path.relpath(dir).replace("\\", "/")) 
     data[i] = root 
    else: 
     preisci(i) 

data[i] = root 

被分配的路徑的列表數據的第i個指數。所以如果我們應該返回數據,那麼數據將包含多個路徑列表。

2

有兩個問題:

  1. 你的函數不是遞歸的(除非preisci電話retFiles,但是你有沒有顯示代碼)。
  2. 它不會返回任何東西,更不用說您聲稱的多個字典。

我不會在這裏實際使用遞歸。請考慮使用可遞歸地遍歷目錄及其所有子目錄的os.walk函數。

要修復第二點,請嘗試將print更改爲return語句。

0

在每個函數調用中都有打印。所以每次運行此函數時都會打印,如果函數以遞歸方式運行,則會多次打印。是的,這個功能不是遞歸的,但我的猜測是,你打算在你的實現中鍵入類似於

else: 
     retFiles(i) 

。這仍然不會按照你想要的方式工作,但那可能是我想你可能會提到的遞歸。然後你會發生多次打印。

相關問題