symtable
— Доступ к таблицам символов компилятора
Таблицы символов формируются компилятором из AST непосредственно перед
формированием байт-кода. Таблица символов отвечает за вычисление области видимости
каждого идентификатора в коде. symtable
обеспечивает интерфейс для
изучения этих таблиц.
Создание таблиц символов
-
symtable.
symtable
(code, filename, compile_type) Возвращает
SymbolTable
верхнего уровня для исходного Python code. 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()
.
-
has_exec
() Возвращает
True
, если блок используетexec
.
-
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
, если имя вводит новое пространство имен.Если используемое в качестве цели имя функции или оператора class, будет истиной.
Например:
>>> table = symtable.symtable("def some_func(): pass", "string", "exec") >>> table.lookup("some_func").is_namespace() True
Обратите внимание, что одно имя может быть привязано к нескольким объектам. Если результат
True
, имя также может быть связано с другими объектами, такими как int или list, которые не вводят новое пространство имен.
-
get_namespaces
() Возвращает список пространств имен, привязанных к этому имени.
-
get_namespace
() Возвращает пространство имен, привязанное к этому имени. Если привязано несколько пространств имен, возникает
ValueError
.
-