Документация Python неофициальный перевод
Содержание страницы

symtable – доступ к таблицам символов компилятораsymtable – Access to the compiler’s symbol tables

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


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

Генерация таблиц символовGenerating Symbol Tables

symtable.symtable(code, filename, compile_type)

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

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

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()

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

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.