#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()))