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