Как сделать рекурсивную функцию, которая строит список
Что было бы хорошим способом получить рекурсивную функцию для построения списка для возврата? Допустим, у меня есть функция, подобная следующей, для генерации списка файлов и каталогов во всех подкаталогах:
def print_directory_listing(directory = "."):
for file_structure in os.listdir(directory):
file_structure_path = os.path.join(directory, file_structure)
if os.path.isdir(file_structure_path):
print_directory_listing(file_structure_path)
else:
print(file_structure_path)
Вместо того, чтобы распечатывать все, как я могу изменить это, чтобы получить список всех файлов и каталогов? Например, было бы хорошо иметь глобальный список, к которому функция добавляет файлы?
Обратите внимание, что я не прошу подробностей о os.walk
; Я задаю общий вопрос о том, каким образом Pythonic мог бы получить рекурсивную функцию для построения и возврата списка.
1 ответ
Благодаря вашему комментарию я думаю, что понял истинную цель вашего вопроса. Если вы посмотрите на следующий код, вы найдете искомую рекурсию и узнаете, как "сохранить переменные дочерних элементов".
import os
def print_directory_listing(directory = '.'):
files_list=[]
for file_structure in os.listdir(directory):
file_structure_path = os.path.join(directory, file_structure)
if os.path.isdir(file_structure_path):
files_list+=print_directory_listing(file_structure_path)
else:
files_list.append(file_structure_path)
return files_list