У меня есть функция, которая возвращает генератор или список в зависимости от флага.
Тем не менее, даже когда я устанавливаю флаг на list
, функция все еще возвращает генератор;также не печатает флаг.
Я ожидаю, что оператор print до команды yield будет оценен первым.Также в этом отношении, если флаг установлен в list
, я не ожидаю, что блок generator
оценит вообще.
import os
def get_iterator_all_files_name(dir_path, flag):
if flag == 'generator':
print(flag)
for (dirpath, dirnames, filenames) in os.walk(dir_path):
for f in filenames:
yield os.path.join(dirpath, f)
elif flag == 'list':
print(flag)
paths = list()
for (dirpath, dirnames, filenames) in os.walk(dir_path):
for f in filenames:
paths.append(os.path.join(dirpath, f))
return paths
Использование функции ...
file_path = 'path/to/files'
flag = 'list'
foo = get_iterator_all_files_name(file_path, flag)
type(foo)
, которая дает результат ...
generator
Что не то, чтоЯ жду;Я ожидал список.