Операция импорта не дает возможности доступа к внешним областям видимости, но она дает возможность обращаться к вложенным областям видимости. Используя квалифицированные пути к именам атрибутов, вполне возможно погрузиться в сколь угодно глубоко вложенные модули и получить доступ к их атрибутам. Например, рассмотрим следующие три файла.
Бесплатные уроки для начинающих по изучению языка программирования Python. Будут рассмотрены: Django и парсинг на Python-e с помощью библиотек
Показаны сообщения с ярлыком Области видимости. Показать все сообщения
Показаны сообщения с ярлыком Области видимости. Показать все сообщения
11 ноября 2015 г.
4 октября 2015 г.
Импортирование и области видимости
Как мы уже знаем, невозможно получить доступ к именам, определенным в другом модуле, не импортировав его предварительно. То есть вы никогда автоматически не получите доступ к именам в другом файле, независимо от вида импортируемого модуля и вызовов функций в вашей программе. Смысл переменной всегда определяется местоположением операции присваивания в программном коде, а для обращения к атрибутам всегда необходимо явно указывать объект.
1 ноября 2012 г.
Области видимости, углубляемся
Сохранение состояния объемлющей области видимости
Из-за отсутствия вложенных областей видимости в инструкциях def в более ранних версиях Python, программный код мог бы терпеть неудачу.
Чтобы разрешить ситуацию, программисты обычно использовали аргументы со значениями по умолчанию для передачи (сохранения) объектов, расположенных в объемлющей области видимости:
def f1():
x = 88
def f2(x=x): # Сохраняет значение переменной x в объемлющей области
print(x) # в виде аргумента
f2()
f1() # Выведет 88
Этот фрагмент будет работать во всех версиях Python.
-----------------------------------------------------------------
с помощью аргументов по умолчанию:
Чтобы разрешить ситуацию, программисты обычно использовали аргументы со значениями по умолчанию для передачи (сохранения) объектов, расположенных в объемлющей области видимости:
def f1():
x = 88
def f2(x=x): # Сохраняет значение переменной x в объемлющей области
print(x) # в виде аргумента
f2()
f1() # Выведет 88
Этот фрагмент будет работать во всех версиях Python.
-----------------------------------------------------------------
Python, области видимости
Области видимости и
вложенные функции
С появлением вложенных функций в области видимости поиск стал сложнее.
• При обращении к переменной (X) поиск имени X сначала производится в локальной области видимости (функции)затем в локальных областях видимости всех
лексически-объемлющих функций, изнутри наружу, затем в текущей глобальной области видимости (в модуле) и, наконец, во встроенной области видимости (модуль builtins). Поиск имен, объявленных в инструкции global, начинается сразу с глобальной (в модуле) области видимости.
• Операция присваивания (X = value) по умолчанию создает или изменяет имя
X в текущей локальной области видимости. Если имя X объявлено глобальным внутри функции, операция присваивания создает или изменяет имя X в области видимости объемлющего модуля. Если имя X объявлено нелокальным внутри функции, операция присваивания создает или изменяет имя X в ближайшей области видимости объемлющей функции.
Обратите внимание, что инструкция global отображает имена в область видимости объемлющего модуля. Когда имеются вложенные функции, можно получить значения переменных в объемлющих функциях, но чтобы их изменить, переменные должны быть указаны в объявлении nonlocal.
29 октября 2012 г.
Области видимости
Области видимости
Данная тема очень важна в изучение и понимании, так как Python не использует никаких идентификаторов доступа, как это делается в других языках. После прочтения данного поста, вы поймете что правильное распределение областей видимостей, вполне необходимо для обеспечения нормальной работы программ, но важно запомнить: переусердствование в использовании глобальных переменных - является дурным тоном. Поэтому мы и будем учится правильно расставлять области видимости...
Область видимости - место где определяются переменные и выполняется их поиск.
Всегда, когда в программе используется какое то имя, интерпретатор создает, изменяет или отыскивает это имя в пространстве имен – в области, где находятся имена. Когда мы говорим о поиске значения имени применительно к программному коду, под термином область видимости подразумевается пространство имен: то есть место в программном коде, где имени было присвоено значение, определяет область видимости этого имени для программного кода.
• Имена, определяемые внутри инструкции def, не вступают в конфликт с именами, находящимися за пределами инструкции def, даже если и там и там присутствуют одинаковые имена. Имя X, которому присвоено значение за пределами данной инструкции def (например, в другой инструкции def или на верхнем уровне модуля), полностью отлично от имени X, которому присвоено значение внутри инструкции def.
Подписаться на:
Сообщения (Atom)