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.
-
