Область видимости в Python — это часть программы, где пространство имен доступно. Пространство имен — это место, где имена хранятся. Если Python откликается на команду, он проверяет пространство имен для определения того, что означает это имя.
Области видимости отличаются и могут быть вложены друг в друга. Python ищет имена в области видимости, начиная с самой вложенной и заканчивая самой внешней.
Предположим, у нас есть следующий код:
def foo(): x = 5 def bar(): print(x) bar() foo()
Здесь у нас есть две области видимости: одна внутри функции foo()
и вторая внутри функции bar()
. Оба определения x
находятся в области видимости функции foo()
. Когда функция bar()
вызывается внутри foo()
, она смотрит внутрь своей собственной области видимости, чтобы найти определение x
, но не находит его. Затем она ищет во внешней области видимости, где находит x
.
Python использует четыре области видимости:
- L (Local) — внутри функции или класса, где была объявлена переменная.
- E (Enclosing) — внутри внешних функций, от ближайшего к дальнему.
- G (Global) — на уровне модуля или скрипта.
- B (Built-in) — встроенные функции и исключения Python.
Это правило называется LEGB и описывает порядок, в котором Python ищет переменные.
Например, когда функция или класс определяется внутри другой функции, они имеют доступ к области видимости внешней функции. Это известно как замыкание.
Однако, если функция определена внутри класса (метод), она не имеет доступа к пространству имен класса. Функция должна получить ссылку на объект класса для доступа к его атрибутам.
Замыкания и область видимости могут быть сложными для понимания, особенно для новичков в Python. Но с практикой и пониманием основных принципов все становится проще.
Добавить комментарий