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