Перейти к основному содержимому

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

То, где вы создаёте переменную, определяет, где её можно использовать: только внутри этой области. Эта идея называется областью видимости.


Локальная область видимости

Когда вы создаёте переменную внутри функции, она находится в локальной области видимости этой функции и не может использоваться больше нигде.

Так, к x в примерах ниже нельзя обратиться снаружи функции, но любая функция, определённая внутри этой функции, всё же может её использовать.

Пример

Внутри функции, которая её создала, переменная работает как обычно:

Prompt
Создайте функцию, которая определяет локальную переменную x=300 и выводит её. Вызовите функцию.
Вывод: полная программа на Python

Пример

Внутренняя функция может читать локальную переменную объемлющей функции:

Prompt
Создайте функцию с локальной переменной x=300 и вложенной внутренней функцией, которая выводит x. Вызовите внутреннюю функцию изнутри внешней функции.
Вывод: полная программа на Python

Глобальная область видимости

Создайте переменную в основной части кода Python, и она станет глобальной переменной, частью глобальной области видимости.

К глобальной переменной можно обратиться из любой области видимости, как глобальной, так и локальной.

Если использовать одно и то же имя и внутри, и снаружи функции, получатся две разные переменные. Та, что снаружи функции, находится в глобальной области видимости, а та, что внутри, в локальной.

Пример

Эта переменная создана вне какой-либо функции, поэтому она глобальная и её может использовать весь код:

Prompt
Создайте глобальную переменную x=300. Выведите её изнутри функции и вне её.
Вывод: полная программа на Python

Пример

Сначала функция выводит свою локальную x, а затем основной код выводит глобальную:

Prompt
Создайте глобальную переменную x=300 и функцию, которая задаёт локальную переменную x=200. Выведите x внутри функции и вне её, чтобы показать, что это разные переменные.
Вывод: полная программа на Python

Ключевое слово global

Вы находитесь в локальной области видимости, но вам нужно создать глобальную переменную? Именно это делает ключевое слово global.

Оно превращает переменную в глобальную.

Это ключевое слово нужно и тогда, когда функция должна изменить значение существующей глобальной переменной.

Пример

Благодаря global переменная x входит в глобальную область видимости:

Prompt
Используйте ключевое слово global внутри функции, чтобы создать глобальную переменную x=300. Выведите x вне функции.
Вывод: полная программа на Python

Пример

Объявление переменной с помощью global позволяет функции изменить её значение:

Prompt
Создайте глобальную переменную x=300. Используйте ключевое слово global внутри функции, чтобы изменить её значение на 200. Выведите x после вызова функции.
Вывод: полная программа на Python

Ключевое слово nonlocal

Вложенные функции используют ключевое слово nonlocal, чтобы работать с переменными окружающей их функции.

С ним переменная принадлежит внешней функции.

Пример

Из-за nonlocal здесь x — это переменная внешней функции:

Prompt
Используйте ключевое слово nonlocal во вложенной функции, чтобы изменить переменную внешней функции. Присвойте x="Jane" во внешней функции, измените значение на "hello" во внутренней и верните x.
Вывод: полная программа на Python

Правило LEGB

Чтобы найти имя переменной, Python применяет правило LEGB и проверяет эти места по порядку:

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

Пример

Правило LEGB в действии:

Prompt
Продемонстрируйте правило LEGB с помощью вложенных функций. На каждом уровне присвойте x значения "global", "enclosing" и "local" и выведите их.
Вывод: полная программа на Python