Возможно, я толстый, но меня смущает, почему эта рекурсивная функция игнорирует предоставленное мною условие исключения.
В приведенном ниже коде я беру базовое значение и получаю список соответствующих значений из другой функции. Каждое значение в списке должно быть обработано, и ему необходим собственный список соответствующих значений, для которых один и тот же процесс происходит до тех пор, пока не будут обработаны все соответствующие значения.
Чтобы избежать обработки любых значений дважды, в the_loop
добавлено условие, предназначенное только для обработки значений, которые еще не были обработаны. Каждый раз, когда значение обрабатывается, оно добавляется в список исключений и должно пропускать l oop.
def the_recursive_func(key):
values = get_values(key) # values is a list of numbers
processed_values = {}
def the_loop(list_of_values):
not_processed = [v for v in list_of_values if v not in processed_values.keys()]
for v in not_processed:
processed = process_value(v)
processed_values[v] = processed
new_values_list = get_values(v)
the_loop(new_values_list)
the_loop(values)
return processed_values
Вместо этого я обрабатываю множество значений дважды. Я изо всех сил пытаюсь увидеть, где это идет не так. Если я изменю для l oop на:
for v in not_processed:
if v in processed_values.keys():
continue
processed = process_value(v)
processed_values[v] = processed
new_values_list = get_values(v)
the_loop(new_values_list)
Тогда я получу результаты, которые я ищу, но А) это спагетти и Б) Я упускаю что-то фундаментальное в том, почему исходный код не работает.