> **Источник:** https://python-all.ru/3.0/library/symtable.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `symtable` – Доступ к таблицам символов компилятора

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

## Генерация таблиц символов

#### `[symtable.symtable]symtable.symtable(code, filename, compile_type)`

Возвращает корневой объект

[`SymbolTable`](https://python-all.ru/3.0/library/symtable.html#symtable.SymbolTable)

для исходного кода Python

*code*

.

*filename*

– это имя файла, содержащего код.

*compile\_type*

аналогичен аргументу

*mode*

функции

[`compile()`](https://python-all.ru/3.0/library/functions.html#compile)

.

## Изучение таблиц символов

#### `[symtable.SymbolTable]class symtable.SymbolTable`

Таблица пространства имён для блока. Конструктор не является открытым.

#### `[symtable.SymbolTable.get_type]get_type()`

Возвращает тип таблицы символов. Возможные значения:

`'class'`

,

`'module'`

и

`'function'`

.

#### `[symtable.SymbolTable.get_id]get_id()`

Возвращает идентификатор таблицы.

#### `[symtable.SymbolTable.get_name]get_name()`

Возвращает имя таблицы. Это имя класса, если таблица предназначена для класса; имя функции, если таблица предназначена для функции; или

`'top'`

, если таблица глобальная (

[`get_type()`](https://python-all.ru/3.0/library/symtable.html#symtable.SymbolTable.get_type)

возвращает

`'module'`

).

#### `[symtable.SymbolTable.get_lineno]get_lineno()`

Возвращает номер первой строки в блоке, который представляет эта таблица.

#### `[symtable.SymbolTable.is_optimized]is_optimized()`

Возвращает

`True`

, если локальные переменные в этой таблице могут быть оптимизированы.

#### `[symtable.SymbolTable.is_nested]is_nested()`

Возвращает

`True`

, если блок является вложенным классом или функцией.

#### `[symtable.SymbolTable.has_children]has_children()`

Возвращает

`True`

, если блок содержит вложенные пространства имён. Их можно получить с помощью

[`get_children()`](https://python-all.ru/3.0/library/symtable.html#symtable.SymbolTable.get_children)

.

#### `[symtable.SymbolTable.has_exec]has_exec()`

Возвращает

`True`

, если блок использует

`exec`

.

#### `[symtable.SymbolTable.has_import_start]has_import_start()`

Возвращает

`True`

, если блок использует импорт со звёздочкой (from-import \*).

#### `[symtable.SymbolTable.get_identifiers]get_identifiers()`

Возвращает список имён символов в этой таблице.

#### `[symtable.SymbolTable.lookup]lookup(name)`

Выполняет поиск

*name*

в таблице и возвращает экземпляр

[`Symbol`](https://python-all.ru/3.0/library/symtable.html#symtable.Symbol)

.

#### `[symtable.SymbolTable.get_symbols]get_symbols()`

Возвращает список экземпляров

[`Symbol`](https://python-all.ru/3.0/library/symtable.html#symtable.Symbol)

для имён в таблице.

#### `[symtable.SymbolTable.get_children]get_children()`

Возвращает список вложенных таблиц символов.

#### `[symtable.Function]class symtable.Function`

Пространство имён для функции или метода. Этот класс наследует [`SymbolTable`](https://python-all.ru/3.0/library/symtable.html#symtable.SymbolTable).

#### `[symtable.Function.get_parameters]get_parameters()`

Возвращает кортеж, содержащий имена параметров этой функции.

#### `[symtable.Function.get_locals]get_locals()`

Возвращает кортеж с именами локальных переменных этой функции.

#### `[symtable.Function.get_globals]get_globals()`

Возвращает кортеж с именами глобальных переменных этой функции.

#### `[symtable.Function.get_frees]get_frees()`

Возвращает кортеж с именами свободных переменных в этой функции.

#### `[symtable.Class]class symtable.Class`

Пространство имён класса. Этот класс наследует [`SymbolTable`](https://python-all.ru/3.0/library/symtable.html#symtable.SymbolTable).

#### `[symtable.Class.get_methods]get_methods()`

Возвращает кортеж с именами методов, объявленных в классе.

#### `[symtable.Symbol]class symtable.Symbol`

Запись в [`SymbolTable`](https://python-all.ru/3.0/library/symtable.html#symtable.SymbolTable), соответствующая идентификатору в исходном коде. Конструктор не является публичным.

#### `[symtable.Symbol.get_name]get_name()`

Возвращает имя символа.

#### `[symtable.Symbol.is_referenced]is_referenced()`

Возвращает

`True`

, если символ используется в своём блоке.

#### `[symtable.Symbol.is_imported]is_imported()`

Возвращает

`True`

, если символ создан из инструкции import.

#### `[symtable.Symbol.is_parameter]is_parameter()`

Возвращает

`True`

, если символ является параметром.

#### `[symtable.Symbol.is_global]is_global()`

Возвращает

`True`

, если символ глобальный.

#### `[symtable.Symbol.is_local]is_local()`

Возвращает

`True`

, если символ является локальным для своего блока.

#### `[symtable.Symbol.is_free]is_free()`

Возвращает

`True`

, если символ упоминается в своём блоке, но не присваивается значение.

#### `[symtable.Symbol.is_assigned]is_assigned()`

Возвращает

`True`

, если символу присваивается значение в его блоке.

#### `[symtable.Symbol.is_namespace]is_namespace()`

Возвращает `True`, если связывание имени создаёт новое пространство имён.

Если имя используется как цель в инструкции функции или класса, это будет истинно.

Обратите внимание, что одно имя может быть связано с несколькими объектами. Если результат равен `True`, имя также может быть связано с другими объектами, такими как int или list, которые не создают новое пространство имён.

#### `[symtable.Symbol.get_namespaces]get_namespaces()`

Возвращает список пространств имён, связанных с этим именем.

#### `[symtable.Symbol.get_namespace]get_namespace()`

Возвращает пространство имён, связанное с этим именем. Если привязано более одного пространства имён, возбуждается

[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)

.
