@etetetetetete

Как вернуть результат рекурсивной функции в переменную?

Написал рекурсивную функцию по поиску вложенных каталогов в корне.
Проблема в том что требуется вернуть список в переменную, но только не так как сделал я, с помощью global, а c помощью return`а.

import os


def SearchDir(path):
    global z
    if os.path.exists(path):
        if os.listdir(path):
            for d in os.listdir(path):
                if os.path.isdir(os.path.join(path, d)):
                    z += [(os.path.join(path, d))]
                    SearchDir(os.path.join(path, d))
        else:
            return print('The directory is empty')
    else:
        return print('The directory does not exist')

path = r'C:\test'
z = []

SearchDir(path)
print(z)


ЗЫ. Python 3
  • Вопрос задан
  • 767 просмотров
Решения вопроса 1
Tark
@Tark
Pyramid'альный мир
А если очень хочется разобраться с рекурсией, то вот:

import os


def SearchDir(path, z=[]):
    if os.path.exists(path):
        if os.listdir(path):
            for d in os.listdir(path):
                if os.path.isdir(os.path.join(path, d)):
                    z += [(os.path.join(path, d))]
                    SearchDir(os.path.join(path, d), z)
        else:
            return print('The directory is empty')
    else:
        return print('The directory does not exist')

    return z

path = r'f:\Python-pyramid\farm'
print(SearchDir(path))

Но вы видите, что код очень непричёсанный, да? Слишком много лишнего написано, да и return print удивляет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
пхп стайл

используй https://docs.python.org/3/library/os.html#os.walk

принт не нужно писать в return
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Надеюсь, понятно.
def SearchDir(path):
   z= []
   def _SearchDir(path):
      ...
      z.append("abc")
      _SearchDir(newpath)
      ...
   _SearchDir(path)
   return z
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы