Содержание страницы
32.3. symtable – Доступ к таблицам символов компилятора¶symtable – Access to the compiler’s symbol tables
Исходный код: Lib/symtable.py
Таблицы символов создаются компилятором из AST непосредственно перед генерацией байт-кода. Таблица символов отвечает за вычисление области видимости каждого идентификатора в коде. symtable предоставляет интерфейс для просмотра этих таблиц.
32.3.1. Генерация таблиц символов¶Generating Symbol Tables
-
symtable.symtable(code, filename, compile_type)¶ Возвращает корневую
SymbolTableдля исходного кода Python code. filename – имя файла, содержащего код. compile_type аналогичен аргументу mode функцииcompile().
32.3.2. Изучение таблиц символов¶Examining Symbol Tables
-
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.
-
has_import_star()¶ Возвращает
True, если блок использует импорт со звёздочкой.
-
get_identifiers()¶ Возвращает список имён символов в этой таблице.
-
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, если символ создан оператором import.
-
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, имя также может быть связано с другими объектами, такими как int или list, которые не вводят новое пространство имён.
-
get_namespaces()¶ Возвращает список пространств имён, связанных с этим именем.
-
get_namespace()¶ Возвращает пространство имён, связанное с этим именем. Если более одного пространства имён связано, возбуждается
ValueError.
-