symtable
— Доступ к таблицам символов компилятора¶
Исходный код: Lib/symtable.py
Таблицы символов формируются компилятором из 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
()¶ Возвращает список имен символов в этой таблице.
-
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
, если символ объявлен глобальным с глобальным инструкция.
-
is_local
()¶ Возвращает
True
, если символ локальная к его блоку.
-
is_annotated
()¶ Вернуть
True
, если символ аннотирован.Добавлено в версии 3.6.
-
is_free
()¶ Возвращает
True
, имеется ли ссылка на символ в блоке, но не назначена.
-
is_assigned
()¶ Возвращает
True
, назначен ли символ в блоке.
-
is_namespace
()¶ Возвращает
True
, если имя биндинг вводит новое пространство имен.Если имя используемый в качестве цели функции или инструкция класса, это будет 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
.
-