Можем ли мы вернуть 2 внутренние функции из 1 внешней функции?

#python #closures #iterable-unpacking

#python #замыкания #повторяемый-распаковка

Вопрос:

У меня есть фабрика функций (принимает n как переменную, инициализированную нулем) с двумя внутренними функциями current(возвращает значение n) и counter (который возвращает значение n 1).

 def factory(n=0):    
    
    def counter():     
        return n 1    
    return counter
        
    def current():
        return n
    return current
        
f_current,f_counter=factory(int(input()))
  

Я получаю TypeError: не удается распаковать объект не итерируемой функции

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

1. return current, counter

2. Я тоже проверил это, но получаю ту же ошибку. Не могли бы вы дать мне точный код.

3. Пожалуйста, не забудьте проголосовать за ответы, которые вам помогли..

4. @superbrain проголосуют за ответы на свои собственные вопросы? Это всегда было разрешено, нет ..?

5. @superbrain ну, это кажется просто глупым (конечно, я тебе верю …)

Ответ №1:

Функции завершаются, как только они сталкиваются с оператором return . Следовательно, ваша заводская функция завершается, когда она видит return counter . Вы можете изменить его следующим образом (возврат после определения обеих функций).

 def factory(n=0):
    def counter():     
        return n 1
        
    def current():
        return n

    return current, counter
        
f_current,f_counter=factory(int(input()))
  

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

1. Пожалуйста, примите ответ, если он показался вам полезным

Ответ №2:

Да, вы можете, но вам нужно иметь только один оператор return . В противном случае первый оператор return выигрывает, а второй никогда не выполняется. Вот пример:

 def factory(n=0):    
    
    def counter():     
        return n 1    
        
    def current():
        return n

    return current, counter
        
f_current, f_counter = factory(int(input()))