symtable — Доступ к таблицам символов компилятора
Исходный код: Lib/symtable.py
Таблицы символов генерируются компилятором из AST непосредственно перед генерацией байт-кода. Таблица символов отвечает за вычисление области действия каждого идентификатора в коде. symtable предоставляет интерфейс для просмотра этих таблиц.
1. Генерация таблиц символов
-
symtable.symtable(code, filename, compile_type) -
Возвращает глобальную
SymbolTableдля Python-кода. filename — имя файла, содержащего код. compile_type аналогичен аргументу mode функцииcompile().
2. Просмотр таблиц символов
-
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_frees() -
Возвращает кортеж, содержащий имена свободных переменных в этой функции.
-
-
class symtable.Class -
Пространство имен класса. Этот класс наследует
SymbolTable.-
get_methods() -
Возвращает кортеж, содержащий имена методов, объявленных в классе.
-
-
class symtable.Symbol -
Элемент
SymbolTable, соответствующий идентификатору в исходном коде. Конструктор не является общедоступным.-
get_name() -
Возвращает имя символа.
-
is_referenced() -
Возвращает
Trueесли символ используется в своем блоке.
-
is_imported() -
Возвращает
Trueесли символ создан из инструкции импорта.
-
is_parameter() -
Возвращает
Trueесли символ является параметром.
-
is_global() -
Возвращает
Trueесли символ является глобальным.
-
is_declared_global() -
Возвращает
Trueесли символ объявлен глобальным с помощью инструкции global.
-
is_local() -
Возвращает
Trueесли символ локален для своего блока.
-
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, имя также может быть присвоено другим объектам, таким как целое число или список, которые не вводят нового пространства имен.
-
get_namespaces() -
Возвращает список пространств имён, связанных с этим именем.
-
get_namespace() -
Возвращает пространство имён, связанное с этим именем. Если привязано более одного пространства имён, генерируется
ValueError.
-
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/symtable.html