tg-me.com/python_job_interview/1108
Last Update:
🐍 Хитрая задача на Python: замыкание + nonlocal
📌 Задача:
Напиши функцию counter(start)
, которая возвращает функцию-счётчик. Каждый вызов этой функции увеличивает значение на 1.
Пример:
c = counter(10)
print(c()) # 11
print(c()) # 12
print(c()) # 13
d = counter(100)
print(d()) # 101
print(c()) # 14 ← работает независимо
🎯 Подвох:
- Нельзя использовать глобальные переменные
- Нужно использовать замыкание
- Без
nonlocal
— не заработает✅ Решение:
def counter(start):
count = start
def inner():
nonlocal count
count += 1
return count
return inner
# Проверка
a = counter(5)
print(a()) # 6
print(a()) # 7
b = counter(100)
print(b()) # 101
print(a()) # 8
🧠 Объяснение подвоха:
-
counter
возвращает функцию, внутри которой count
сохраняется в замыкании-
nonlocal
нужен, чтобы изменить внешнюю переменную, а не просто читать её- Каждое замыкание имеет своё независимое состояние
⚠️ Без
nonlocal count
, Python создаст локальную count
внутри inner()
, и UnboundLocalError
— гарантирован🛠️ Применяется в:
• Реализации генераторов состояния
• Мини-хранилищах внутри функций
• Кеширующих функциях и декораторах
@python_job_interview
BY Python вопросы с собеседований
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/python_job_interview/1108