2011-12-18 9 views
0

なぜこの再帰関数は1つではなく複数の辞書を返すのですか?python関数は1つではなく複数のdictを返します

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

Uh ...その関数が返さない* ANYTHING * ... –

+0

最後の行(print(data))は、通常**メソッドから返される**を表しますか? –

答えて

1

実際には、(印刷(データ)行が実際に返されると思われる場合)メソッドがリストのリストを返すのは理にかなっています。

data[i] = root 

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

ラインは、データのi番目のインデックスへのパスのリストを割り当てています。したがって、データを返すと仮定すると、データにはパスの複数のリストが含まれます。

2

二つの問題があります。

  1. preisciretFilesを呼び出していない限り、しかし、あなたはそのコードを示していない)あなたの関数は再帰的ではありませんが。
  2. 何か、あなたが主張するように複数の辞書はありません。

ここで再帰は実際には使用しません。代わりに、ディレクトリとそのすべてのサブディレクトリを再帰的に歩くことができるos.walk関数を使用することを検討してください。

2つ目のポイントを修正するには、printをreturnステートメントに変更してみてください。

0

すべての関数呼び出しで印刷されます。したがって、この関数が実行されるたびに印刷されます。これは、関数が再帰的に実行される場合は複数回です。そして、はい、この関数は再帰的ではありませんが、あなたの実装では

else: 
     retFiles(i) 

のようなタイプを入力しようとしていたと思います。それでもあなたが望むような方法ではうまくいきませんが、それはあなたが指摘していると思われる再帰です。そして、あなたは複数のプリントが起こるでしょう。

関連する問題