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()¶
Повертає об’єкт представлення, що містить імена символів у таблиці. Перегляньте документацію об’єктів перегляду.
- get_children()¶
Повертає список вкладених таблиць символів.
- class symtable.Function¶
A namespace for a function or method. This class inherits from
SymbolTable
.- get_parameters()¶
Повертає кортеж, що містить імена параметрів цієї функції.
- get_locals()¶
Повертає кортеж, що містить імена місцевих жителів у цій функції.
- get_globals()¶
Повертає кортеж, що містить імена глобалів у цій функції.
- get_nonlocals()¶
Повертає кортеж, що містить імена нелокальних у цій функції.
- get_frees()¶
Повертає кортеж, що містить імена вільних змінних у цій функції.
- class symtable.Class¶
A namespace of a class. This class inherits from
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 or no namespace is bound to this name, a
ValueError
is raised.