# `symtable` — Access to the compiler’s symbol tables

Вихідний код: Lib/symtable.py

Таблиці символів генеруються компілятором з AST безпосередньо перед генерацією байт-коду. Таблиця символів відповідає за обчислення області кожного ідентифікатора в коді. `symtable` надає інтерфейс для перевірки цих таблиць.

## Створення таблиць символів

symtable.symtable(code, filename, compile_type)

  Повертає верхній рівень `SymbolTable` для вихідного коду Python. filename — це ім’я файлу, що містить код. compile_type схожий на аргумент mode для `compile()`.

## Вивчення таблиць символів

class symtable.SymbolTable

  Таблиця простору імен для блоку. Конструктор не є публічним.

  get_type()

    Return the type of the symbol table. Possible values are `'class'`, `'module'`, and `'function'`.

  get_id()

    Повернути ідентифікатор таблиці.

  get_name()

    Return the table’s name. This is the name of the class if the table is for a class, the name of the function if the table is for a function, or `'top'` if the table is global (`get_type()` returns `'module'`).

  get_lineno()

    Повертає номер першого рядка в блоці, який представляє ця таблиця.

  is_optimized()

    Повертає `True`, якщо локальні значення в цій таблиці можна оптимізувати.

  is_nested()

    Повертає `True`, якщо блок є вкладеним класом або функцією.

  has_children()

    Повертає `True`, якщо в блоці є вкладені простори імен. Їх можна отримати за допомогою `get_children()`.

  get_identifiers()

    Повертає об’єкт представлення, що містить імена символів у таблиці. Перегляньте документацію об’єктів перегляду.

  lookup(name)

    Знайдіть name у таблиці та поверніть екземпляр `Symbol`.

  get_symbols()

    Повертає список екземплярів `Symbol` для імен у таблиці.

  get_children()

    Повертає список вкладених таблиць символів.

class symtable.Function

  A namespace for a function or method. This class inherits from `SymbolTable`.

  get_parameters()

    Повертає кортеж, що містить імена параметрів цієї функції.

  get_locals()

    Повертає кортеж, що містить імена місцевих жителів у цій функції.

  get_globals()

    Повертає кортеж, що містить імена глобалів у цій функції.

  get_nonlocals()

    Return a tuple containing names of nonlocals in this function.

  get_frees()

    Return a tuple containing names of free variables in this function.

class symtable.Class

  A namespace of a class. This class inherits from `SymbolTable`.

  get_methods()

    Return a tuple containing the names of methods declared in the class.

class symtable.Symbol

  Запис у `SymbolTable`, що відповідає ідентифікатору в джерелі. Конструктор не є публічним.

  get_name()

    Повернути назву символу.

  is_referenced()

    Повертає `True`, якщо символ використовується в його блоці.

  is_imported()

    Повертає `True`, якщо символ створено з оператора імпорту.

  is_parameter()

    Повертає `True`, якщо символ є параметром.

  is_global()

    Повертає `True`, якщо символ є глобальним.

  is_nonlocal()

    Повертає `True`, якщо символ нелокальний.

  is_declared_global()

    Повертає `True`, якщо символ оголошено глобальним за допомогою глобального оператора.

  is_local()

    Повертає `True`, якщо символ є локальним для свого блоку.

  is_annotated()

    Повертає `True`, якщо символ анотований.

    Нове в версії 3.6.

  is_free()

    Повертає `True`, якщо символ є посиланням у його блоці, але не призначений.

  is_assigned()

    Повертає `True`, якщо символу призначено в його блоці.

  is_namespace()

    Повертає `True`, якщо зв’язування імен створює новий простір імен.

    Якщо ім’я використовується як ціль оператора функції чи класу, це буде вірно.

    Наприклад:

        >>> table = symtable.symtable("def some_func(): pass", "string", "exec")
        >>> table.lookup("some_func").is_namespace()
        True

    Зауважте, що одне ім’я може бути прив’язане до кількох об’єктів. Якщо результат `True`, ім’я також може бути прив’язане до інших об’єктів, таких як int або список, які не вводять новий простір імен.

  get_namespaces()

    Повертає список просторів імен, прив’язаних до цього імені.

  get_namespace()

    Return the namespace bound to this name. If more than one or no namespace is bound to this name, a `ValueError` is raised.