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

Исходный код: Lib/symtable.py


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

Создание таблиц символов

symtable.symtable(code, filename, compile_type)

Возвращает значение верхнего уровня SymbolTable для исходного кода Python. filename - это имя файла, содержащего код. compile_type аналогично аргументу mode для compile().

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

class symtable.SymbolTable

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

get_type()

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

get_id()

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

get_name()

Верните имя таблицы. Это имя класса, если таблица предназначена для класса, имя функции, если таблица предназначена для функции, или 'top', если таблица глобальная (get_type() возвращает 'module').

get_lineno()

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

is_optimized()

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

is_nested()

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

has_children()

Возвращает True, если в блоке есть вложенные пространства имен. Их можно получить с помощью get_children().

get_identifiers()

Возвращает объект представления, содержащий названия символов в таблице. Смотрите documentation of view objects.

lookup(name)

Выполните поиск name в таблице и верните экземпляр Symbol.

get_symbols()

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

get_children()

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

class symtable.Function

Пространство имен для функции или метода. Этот класс наследуется от SymbolTable.

get_parameters()

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

get_locals()

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

get_globals()

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

get_nonlocals()

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

get_frees()

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

class symtable.Class

Пространство имен класса. Этот класс наследуется от SymbolTable.

get_methods()

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

class symtable.Symbol

Запись в SymbolTable, соответствующая идентификатору в исходном коде. Конструктор не является общедоступным.

get_name()

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

is_referenced()

Возвращает True, если символ используется в соответствующем блоке.

is_imported()

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

is_parameter()

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

is_global()

Верните True, если символ является глобальным.

is_nonlocal()

Верните True, если символ не является локальным.

is_declared_global()

Возвращает True, если символ объявлен глобальным с помощью инструкции global.

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 или list, что не создает нового пространства имен.

get_namespaces()

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

get_namespace()

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

Вернуться на верх