nonlocal используется во вложенной функции для изменения переменной из ближайшей охватывающей области, а не глобальной области.
Пример
from collections.abc import Callable
def counter() -> Callable:
value = 0
def inc() -> int:
nonlocal value
value += 1
return value
return inc
Разбор
Суммируя:
- Локальная переменная принадлежит текущей функции.
nonlocal изменяет состояние внешней функции.
- Это ключевой механизм для замыканий с отслеживанием состояния.
Итог
nonlocal используется во вложенной функции для изменения переменной из ближайшей охватывающей области, а не глобальной области.