312.49K
Category: programmingprogramming

Область_видимости

1.

Область
видимости

2.

Определение
• Область видимости (scope) — это та часть кода, где
переменная доступна, открыта и видима. Это одна
из первых вещей, на которую обращают внимание в
любой школе программирования Python, так что
даже новички с ней, как правило, знакомы.
• Если бы не подсказки IDE, неизвестно, сколько бы
длилась отладка соответствующих участков кода у
среднего питониста. Так что если вы стремитесь
расширить спектр навыков, время выйти за
привычные представления о двух областях и
освоить все четыре.

3.

Python использует четыре области видимости:
1. L (Local) — внутри функции или класса, где
была объявлена переменная.
2. E (Enclosing) — внутри внешних функций,
от ближайшего к дальнему.
3. G (Global) — на уровне модуля или скрипта.
4. B (Built-in) — встроенные функции и
исключения Python.

4.

Локальная (Local) и глобальная (Global)
• Сразу видно глобальную переменную – global. Она
удобна в использовании, но не безопасна. При
разрастающемся коде легко добиться ситуации, что
переменная меняется несколько раз, и это создает
лазейки для ее перезаписи всем желающим.
Впрочем, за семь лет программирования
проблемных ситуаций на этой почве у меня не
возникло ни разу. Но информационной
безопасностью не занимаюсь.
• Заполучить вторую переменную local в сниппете
ниже можно только при вызове func():

5.

• Глобальные переменные плохи тем, что делают код
менее гибким. Например, если два модуля имеют
общую глобальную переменную, мы не можем
изменить одну, не учитывая, как это повлияет на
другую. Более того, глобальные переменные могут быть
изменены любой частью скрипта, что затрудняет
отслеживание изменений и потенциально может
привести к уязвимостям в системе безопасности.
• Локальные переменные ни хороши, ни плохи сами по
себе. Но дают возможность переиспользовать одно и то
же имя переменной в коде несколько раз. Возможно,
некоторые из вас уже понимают, сколько раз за скрипт
можно переиспользовать счетчик i.

6.

Охватывающая (Enclosing)
• Позволяет «выходить» из
локальной о.ф. на
верхний уровень — но не
глобальный. Допустим, у
нас есть функция func1(),
в которой определена
еще одна функция
func2(). Оператор
nonlocal позволяет
внутренней переменной • Такие звери нужны, если вы
используете вложенные функции
enclosing выйти на
что в целом случается нечасто.
Самый простой пример
уровень видимости
употребления – цикл внутри
«верховной» функции:
цикла, счетчик i и снаружи, и
внутри.

7.

Встроенная (Built-in)
• Самая широкая область. В ней есть все
привычные «персонажи», которые
загружаются в область переменных Python при
запуске интерпретатора. К примеру, имя файла
автоматически становится встроенной
переменной, и к ней мы обращаемся с
помощью двух подчеркиваний:
• Зарезервированные слова тоже относят к этой
категории:

8.

9.

• Вопрос: Какое значение выведется при
вызове outer_function()?

10.

• Вопрос: Какое значение будет выведено
после выполнения кода?

11.

• Вопрос: Какое значение выведется при
вызове func()?

12.

• Вопрос: Какие значения выведутся при
выполнении кода?

13.

• Какие значения выведутся при выполнении
кода?
English     Русский Rules