symtable
— Access to the compiler’s symbol tables¶
Вихідний код: Lib/symtable.py
Таблиці символів генеруються компілятором з AST безпосередньо перед генерацією байт-коду. Таблиця символів відповідає за обчислення області кожного ідентифікатора в коді. symtable
надає інтерфейс для перевірки цих таблиць.
Створення таблиць символів¶
-
symtable.
symtable
(code, filename, compile_type)¶ Повертає верхній рівень
SymbolTable
для вихідного коду Python. filename — це ім’я файлу, що містить код. compile_type схожий на аргумент mode дляcompile()
.
Вивчення таблиць символів¶
-
class
symtable.
SymbolTable
¶ Таблиця простору імен для блоку. Конструктор не є публічним.
-
get_type
()¶ Return the type of the symbol table. Possible values are
'class'
,'module'
, and'function'
.
-
get_id
()¶ Повернути ідентифікатор таблиці.
-
get_name
()¶ Return the table’s name. This is the name of the class if the table is for a class, the name of the function if the table is for a function, or
'top'
if the table is global (get_type()
returns'module'
).
-
get_lineno
()¶ Повертає номер першого рядка в блоці, який представляє ця таблиця.
-
is_optimized
()¶ Повертає
True
, якщо локальні значення в цій таблиці можна оптимізувати.
-
is_nested
()¶ Повертає
True
, якщо блок є вкладеним класом або функцією.
-
has_children
()¶ Повертає
True
, якщо в блоці є вкладені простори імен. Їх можна отримати за допомогоюget_children()
.
-
get_identifiers
()¶ Return a list of names of symbols in this table.
-
get_children
()¶ Повертає список вкладених таблиць символів.
-
-
class
symtable.
Function
¶ A namespace for a function or method. This class inherits
SymbolTable
.-
get_parameters
()¶ Повертає кортеж, що містить імена параметрів цієї функції.
-
get_locals
()¶ Повертає кортеж, що містить імена місцевих жителів у цій функції.
-
get_globals
()¶ Повертає кортеж, що містить імена глобалів у цій функції.
-
get_nonlocals
()¶ Повертає кортеж, що містить імена нелокальних у цій функції.
-
get_frees
()¶ Повертає кортеж, що містить імена вільних змінних у цій функції.
-
-
class
symtable.
Class
¶ A namespace of a class. This class inherits
SymbolTable
.-
get_methods
()¶ Return a tuple containing the names of methods declared in the class.
-
-
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
, якщо зв’язування імен створює новий простір імен.Якщо ім’я використовується як ціль оператора функції чи класу, це буде вірно.
Наприклад:
>>> table = symtable.symtable("def some_func(): pass", "string", "exec") >>> table.lookup("some_func").is_namespace() True
Зауважте, що одне ім’я може бути прив’язане до кількох об’єктів. Якщо результат
True
, ім’я також може бути прив’язане до інших об’єктів, таких як int або список, які не вводять новий простір імен.
-
get_namespaces
()¶ Повертає список просторів імен, прив’язаних до цього імені.
-
get_namespace
()¶ Return the namespace bound to this name. If more than one namespace is bound,
ValueError
is raised.
-