Рекурсивная функция Python возвращает тип none даже после использования возврата к функции?

#python #function #return #return-value

#python #функция #Возврат #возвращаемое значение

Вопрос:

Я работаю над этим сегментом кода:

 result=[]
def function(i,x,Tree,result):
    if isinstance(Tree,ExNode):     
        return 0    
    a=Tree.tempatt
    if x[a]<Tree.tempval:            
        return result.append(Tree.val), function(i,x,Tree.left,result)
    else:                   
        return result.append(Tree.val), function(i,x,Tree.right,result)
  

Здесь tempatt, tempval, val являются компонентами класса Tree .

Эта функция работает по желанию, но возвращает None . Однако в проводнике переменных я вижу результирующую переменную с желаемыми значениями, образующими список.

Комментарии:

1. append возвращает None .

2. Да, спасибо, я это проверил, но какую еще структуру использовать, чтобы получить все эти значения, возвращаемые из рекурсивного цикла? Есть предложения?

3. Вы можете вернуться result [Tree.val] , если хотите вернуть объединенный список. Или вы могли бы добавить result , а затем вернуть result .

4. вместо строк ‘return’ напишите следующее: ‘result.append(Tree.val), function(i, x,Tree.left,result)’ а затем ‘return result’

5. @sadafShafi: большое спасибо. Я понимаю свою ошибку…. Ваш подход намного лучше

Ответ №1:

Напишите это так

 result=[]
def function(i,x,Tree,result):
    if isinstance(Tree,ExNode):     
        return 0    
    a=Tree.tempatt
    if x[a]<Tree.tempval:  
        result.append(Tree.val), function(i,x,Tree.left,result)  
        return result
    else:
        result.append(Tree.val), function(i,x,Tree.right,result)          
        return result
  

В вашем случае вы возвращали не список, а функцию, которая возвращает none