Для обычных функций действует поиск LEGB: local, enclosing, global, builtins. global и nonlocal управляют тем, к какому связыванию относится присваивание; блоки if и for обычно не создают отдельный scope.
Какие области видимости есть в Python?
Для обычных функций действует поиск LEGB: local, enclosing, global, builtins. global и nonlocal управляют тем, к какому связыванию относится присваивание; блоки if и for обычно не создают отдельный scope.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для обычных функций действует поиск LEGB: local, enclosing, global, builtins. global и nonlocal управляют тем, к какому связыванию относится присваивание; блоки if и for обычно не создают отдельный scope.
Присваивание имени внутри функции делает его локальным, если не объявлено иначе, что может привести к UnboundLocalError при чтении до присваивания. Области классов, comprehensions и аннотаций имеют дополнительные особенности. Поэтому LEGB — полезная базовая модель, но не объяснение любого возможного контекста. На примере всегда уточняйте, где объявлены и изменяются имена.