Имена относятся к объектам. Имена переменных вводятся операциями связывания имен и операциями присваивания.
Следующие конструкции связывают имена с объектами:
Формальные параметры (аргументы) с функциями.
func foo(a, b=None): # связывание переменных 'a' и 'b' с # с областью видимости функции ...
import os.path as pt: # связывание переменной pt с # именем модуля os.path ... from os import path as pt: # связывание переменной pt с # именем модуля os.path
Определение классов и функций в коде. Связывают имя класса или функции с блоком кода внутри.
Индификатор переменной, если он встречаются в присваивании:
for ... in
, for item in sequence: # связывание переменной item с каждым # элементом последовательности по очереди ...
with
,with open('foo.txt', 'r+') as fp: # связывание переменной fp с результатом функции open() ...
except
except E as N: # связывание переменной `N` с значением `E` ...
Оператор импорта from ... import *
связывает все имена, определенные в импортируемом модуле, за исключением тех, которые начинаются с символа подчеркивания. Оператор from
может использоваться только на уровне модуля.
Каждая операция связывания имен или импорта import
выполняется в блоке, определяемом определением класса или функции или на уровне модуля (блок кода верхнего уровня).
Если имя связано в блоке кода, оно является локальной переменной этого блока, если только оно не объявлено как nonlocal
или global
. Если имя связано на уровне файла сценария (модуля), это глобальная переменная.
Переменные файла сценария являются локальными и глобальными. Если переменная используется в блоке кода, но не определена в нем, то такая переменная называется свободной. Свободные переменные разрешаются не в ближайшем окружающем пространстве имен, а в глобальном пространстве имен.
Каждое появление имени переменной в тексте программы относится к привязке имени, установленной правилами разрешения имен.