Искать
Вы превысили запрос на
0 знаков

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

Не пройден
0
0

Кратко

- Область видимости в Python предотвращает конфликт имен в больших проектах.

- Место инициализации переменной в коде играет важную роль.

- Область видимости позволяет сохранять состояние между вызовами функций.

- Чрезмерное использование глобальных переменных может затруднить сопровождение кода.

- Интерпретатор Python ищет имена согласно правилу LEGB (Local, Enclosed, Global, Built-in).

- Локальная область видимости создается при вызове функции и исчезает после завершения выполнения.

- Оператор global задает пространство имен и сообщает об изменении глобального имени.

- Вложенная область видимости позволяет сохранять информацию о состоянии для повторного вызова функции.

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

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

Самые основы областей видимости в Python

Вообще, что такое область видимости в Python? То, где будет доступна переменная, это и есть область видимости. Интерпретатор Python ищет имена в соответствии с правилом LEGB. Например, если вы указываете какое-то имя, Python сначала будет искать его последовательно в локальной, вложенной, глобальной и встроенной области видимости. Это означает следующее: поиск имени осуществляется внутри функции (локальная область), далее внутри тех функций, в которых располагается наша функция (вложенная область), далее в скрипте (глобальная область) и в конце, если имя не было найдено ранее, в зарезервированных значениях Python (встроенная область).

Таким образом, имена, присвоенные внутри def из предыдущего урока, видимы только внутри этого оператора. Рассмотрим пример:

Пример (python)
A = 10
def local_A():
    A = 20
    print("Local", A)

local_A()
print("Global: ", A)
local_A() 

Обратите внимание на вывод этой программы:

Пример (python)
Local 20
Global:  10
Local 20 

Мы инициализировали глобальную переменную A числом 10. В тоже время, в функции local_A(), была инициализирована локальная переменная (для функции) с тем же именем, но числом 20. Таким образом видно, что функции помогают избежать конфликт имен. Стоит понимать, локальная область видимости создается при каждом вызове функции и «пропадает» после завершения выполнения функции.

Переопределение встроенных имен

Так как интерпретатор Python использует правило LEGB, то как вы могли догадаться, внутри функции можно «случайно» переопределить встроенную функцию, например, print():

Пример (python)
def redefinition():
    print = "Hello"
    print("World")

redefinition() 

Таким образом, встроенная функция print() была переопределена внутри функции redefinition().

Оператор global

В предыдущем уроке были перечислены операторы и выражения, которые используются для написания функций в Python. Одни из них был оператор global. Этот оператор чем-то напоминает оператор объявления по аналогии с другими языками программирования. Оператор global не объявляет тип или размер. Он задает пространство имен. Оператор global сообщает об изменении какого-то глобального имени. Проще вернуться к примеру, и указать оператор global перед локальной переменной A:

Пример (python)
A = 10
def local_A():
    global A
    A = 20
    print("Local", A)

local_A()
print("Global: ", A)
local_A() 

Обратите внимание, мы не просто приписали оператор global к переменной A. Следующая строка распознается интерпретатором как ошибочная:

Пример (python)
global A = 20 

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

Вложенная область видимости

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

Пример (python)
A = 10
def fl() :
    A = 20
    def f2():
        print(A)
    f2()
fl() 

Здесь функция f2 является вложенной в f1 и запускается, пока выполняется последняя. Обратите внимание, функция f2 печатает переменную А не глобальную, а вложенную или локальную для функции f1. Теперь бы плавно перейти к замыканиям в Python. Но лучше оставим эту непростую тему до следующего урока.

Тест

Две секундочки...

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Типы данных в PythonЗнакомство с Python
Написание модулей в PythonЗнакомство с Python
Продолжаем написание классов в PythonЗнакомство с Python
Еще о возможностях модулей в PythonЗнакомство с Python
Генераторы и оператор yield в PythonЗнакомство с Python
Первое знакомство с PythonЗнакомство с Python
Основы функций в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Итоги раздела «Самые основы Python»Знакомство с Python
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

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

Удачи в обучении!

Закрыть окно