Сообщить об ошибке.

Связывание имен с объектами

Имена относятся к объектам. Имена переменных вводятся операциями связывания имен и операциями присваивания.

Следующие конструкции связывают имена с объектами:

  • Формальные параметры (аргументы) с функциями.

    func foo(a, b=None):
        # связывание переменных 'a' и 'b' с 
        # с областью видимости функции
        ...
    
  • Оператор import.

    import os.path as pt:
        # связывание переменной pt с 
        # именем модуля os.path
        ...
    from os import path as pt:
        # связывание переменной pt с 
        # именем модуля os.path
    
  • Определение классов и функций в коде. Связывают имя класса или функции с блоком кода внутри.

  • Индификатор переменной, если он встречаются в присваивании:

    for item in sequence:
        # связывание переменной item с каждым
        # элементом последовательности по очереди
        ...
    
    • в выражении with,
    with open('foo.txt', 'r+') as fp:
        # связывание переменной fp с результатом функции open()
        ...
    
    except E as N:
        # связывание переменной `N` с значением `E`
        ...
    

Оператор импорта from ... import * связывает все имена, определенные в импортируемом модуле, за исключением тех, которые начинаются с символа подчеркивания. Оператор from может использоваться только на уровне модуля.

Каждая операция связывания имен или импорта import выполняется в блоке, определяемом определением класса или функции или на уровне модуля (блок кода верхнего уровня).

Если имя связано в блоке кода, оно является локальной переменной этого блока, если только оно не объявлено как nonlocal или global. Если имя связано на уровне файла сценария (модуля), это глобальная переменная.

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

Каждое появление имени переменной в тексте программы относится к привязке имени, установленной правилами разрешения имен.