Прив’язка імен
Оновлено: 28.04.2023
Names стосуються об’єктів. Імена вводяться за допомогою операцій зв’язування імен.
Наступні конструкції зв’язують імена:
формальні параметри функцій, визначення класів, визначення функцій, вирази присвоєння, targets, які є ідентифікаторами, якщо зустрічаються у призначенні: for заголовок циклу, after as in a with statement, except clause, except* clause, or in the as-pattern in structural pattern matching, у шаблоні захоплення в зіставленні структурного шаблону import оператори.
Оператор import у формі from ... import * прив’язує всі імена, визначені в імпортованому модулі, за винятком тих, що починаються з підкреслення. Цю форму можна використовувати лише на рівні модуля.
Ціль, що зустрічається в операторі del, також вважається зв’язаною для цієї мети (хоча фактична семантика полягає в тому, щоб роз’єднати ім’я).
Кожен оператор призначення або імпорту відбувається в блоці, визначеному визначенням класу чи функції, або на рівні модуля (блок коду верхнього рівня).
Якщо ім’я прив’язане до блоку, воно є локальною змінною цього блоку, якщо не оголошено як nonlocal або global. Якщо ім’я прив’язане на рівні модуля, воно є глобальною змінною. (Змінні блоку коду модуля є локальними та глобальними.) Якщо змінна використовується в блоці коду, але не визначена там, це free variable.
Кожне входження імені в текст програми посилається на binding цього імені, встановлене наступними правилами розпізнавання імен.