# `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 `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 `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 namespace is bound, `ValueError` is raised.