Что выведет код Middle Функции и области видимости обновлено
Два счётчика на замыканиях
Вопрос
Что выведет код? По строке на каждый print.
def make():
n = 0
def inc(step=1):
nonlocal n
n += step
return n
return inc
a, b = make(), make()
a(); a(5)
print(a(), b())
print(a.__code__.co_freevars)
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 7 1, ('n',). Каждый вызов make() создаёт свою переменную n, поэтому счётчики независимы. a получил 1, затем 6, затем 7; b впервые даёт 1. cofreevars перечисляет свободные переменные замыкания: кортеж ('n',).
Что выведет
7 1
('n',)
Разбор
Каждый вызов make() создаёт свою переменную n, поэтому счётчики независимы. a получил 1, затем 6, затем 7; b впервые даёт 1. co_freevars перечисляет свободные переменные замыкания: кортеж ('n',).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Функции и области видимости»
- Что такое *args и **kwargs
- Перекрытие встроенных имён
- Как передаются аргументы в функцию Python
- Где хранятся переменные замыкания
- Вызов с *args и **kwargs: разбор сигнатуры
- Композиция функций
- Мемоизация через замыкание
- Повтор вызова с ограничением попыток