Области видимости в Python, о которых вы не знали
Рассказываем обо всех четырех областях видимости Python, которые нужно освоить разработчикам, и о том, как их использовать.
4К открытий9К показов
Область видимости (scope) — это та часть кода, где переменная доступна, открыта и видима. Это одна из первых вещей, на которую обращают внимание в любой школе программирования Python, так что даже новички с ней, как правило, знакомы.
Если бы не подсказки IDE, неизвестно, сколько бы длилась отладка соответствующих участков кода у среднего питониста. Так что если вы стремитесь расширить спектр навыков, время выйти за привычные представления о двух областях и освоить все четыре.
1 + 2. Локальная (Local) и глобальная (Global)
Сразу видно глобальную переменную – global. Она удобна в использовании, но не безопасна. При разрастающемся коде легко добиться ситуации, что переменная меняется несколько раз, и это создает лазейки для ее перезаписи всем желающим. Впрочем, за семь лет программирования проблемных ситуаций на этой почве у меня не возникло ни разу. Но информационной безопасностью не занимаюсь.
Заполучить вторую переменную local в сниппете ниже можно только при вызове func():
Глобальные переменные плохи тем, что делают код менее гибким. Например, если два модуля имеют общую глобальную переменную, мы не можем изменить одну, не учитывая, как это повлияет на другую. Более того, глобальные переменные могут быть изменены любой частью скрипта, что затрудняет отслеживание изменений и потенциально может привести к уязвимостям в системе безопасности.
Локальные переменные ни хороши, ни плохи сами по себе. Но дают возможность переиспользовать одно и то же имя переменной в коде несколько раз. Возможно, некоторые из вас уже понимают, сколько раз за скрипт можно переиспользовать счетчик i.
3. Охватывающая (Enclosing)
Позволяет «выходить» из локальной о.в. на верхний уровень — но не глобальный. Допустим, у нас есть функция func1()
, в которой определена еще одна функция func2()
. Оператор nonlocal
позволяет внутренней переменной enclosing
выйти на уровень видимости «верховной» функции:
Такие звери нужны, если вы используете вложенные функции, что в целом случается нечасто. Самый простой пример употребления – цикл внутри цикла, счетчик i и снаружи, и внутри.
4. Встроенная (Built-in)
Самая широкая область. В ней есть все привычные «персонажи», которые загружаются в область переменных Python при запуске интерпретатора. К примеру, имя файла автоматически становится встроенной переменной, и к ней мы обращаемся с помощью двух подчеркиваний:
Зарезервированные слова тоже относят к этой категории:
Заключение
Для удобства восприятия вашему вниманию диаграмма, условно характеризующая взаимоотношения этих четырех видов переменных:
Стоит отметить, что не всем питонистам это понятие пригождается каждый день. Области видимости – повседневность фулстэк-разработчика, но не дата-сайентиста. Так что волноваться на ее счет особо не стоит, пока вы осознаете, каким именно программистом хотите стать.
Какие области вам были знакомы?
Глобальная, локальная
Все
Ни одной, только учусь
4К открытий9К показов