Как сделать рекурсивную функцию, которая строит список

Что было бы хорошим способом получить рекурсивную функцию для построения списка для возврата? Допустим, у меня есть функция, подобная следующей, для генерации списка файлов и каталогов во всех подкаталогах:

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
Другие вопросы по тегам