return
は、最初の反復自体で返します。あなたが望むのは、すべての反復からパスを取得することです。 1つの方法はreturn
をyield
に変更することです。今すぐdirslist
はジェネレータ関数になり、あなたのパスを1つずつ返します。あなたは、発電機の人いないのであれば
def dirslist():
for root, dirs, files in os.walk("c://", topdown=False):
for name in files:
yield(os.path.join(root, name))
for name in dirs:
yield(os.path.join(root, name))
print(list(dirslist()))
別のアプローチは、リストにあなたのパスを蓄積し、代わりにそれを返すことです。
def dirslist():
paths = []
for root, dirs, files in os.walk("c://", topdown=False):
for name in files:
paths.append(os.path.join(root, name))
for name in dirs:
paths.append(os.path.join(root, name))
return paths
print(dirslist())
ここで注意すべき主なものは、一度だけの機能からreturn
戻り、各反復でしばらくyield
戻ると、直前の繰り返しの後から、それが呼び出されるたびに再開するということです。
機能が終了した後は、一度「返品」することができます。 – jonrsharpe
すべてのforループの後に配列を返しますか? – jmunsch