Документация Python неофициальный перевод

symtable.md

176 строк · 8.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.11/library/symtable.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`symtable`](https://python-all.ru/3.11/library/symtable.html#module-symtable) – доступ к таблицам символов компилятора89**Исходный код:** [Lib/symtable.py](https://python-all.ru/src/3.11/Lib/symtable.py)1011---1213Таблицы символов создаются компилятором из AST непосредственно перед генерацией байт-кода. Таблица символов отвечает за вычисление области видимости каждого идентификатора в коде. [`symtable`](https://python-all.ru/3.11/library/symtable.html#module-symtable) предоставляет интерфейс для просмотра этих таблиц.1415## Генерация таблиц символов1617#### `symtable.symtable(code, filename, compile_type)`1819Возвращает корневую [`SymbolTable`](https://python-all.ru/3.11/library/symtable.html#symtable.SymbolTable) для исходного кода Python *code*. *filename* – имя файла, содержащего код. *compile\_type* аналогичен аргументу *mode* функции [`compile()`](https://python-all.ru/3.11/library/functions.html#compile).2021## Изучение таблиц символов2223#### `class symtable.SymbolTable`2425Таблица пространства имён для блока. Конструктор не является открытым.2627#### `get_type()`2829Возвращает тип таблицы символов. Возможные значения: `'class'`, `'module'` и `'function'`.3031#### `get_id()`3233Возвращает идентификатор таблицы.3435#### `get_name()`3637Возвращает имя таблицы. Это имя класса, если таблица для класса, имя функции, если таблица для функции, или `'top'`, если таблица глобальная ([`get_type()`](https://python-all.ru/3.11/library/symtable.html#symtable.SymbolTable.get_type) возвращает `'module'`).3839#### `get_lineno()`4041Возвращает номер первой строки в блоке, который представляет эта таблица.4243#### `is_optimized()`4445Возвращает `True`, если локальные переменные в этой таблице можно оптимизировать.4647#### `is_nested()`4849Возвращает `True`, если блок является вложенным классом или функцией.5051#### `has_children()`5253Возвращает `True`, если блок содержит вложенные пространства имён. Их можно получить с помощью [`get_children()`](https://python-all.ru/3.11/library/symtable.html#symtable.SymbolTable.get_children).5455#### `get_identifiers()`5657Возвращает объект представления, содержащий имена символов в таблице. См. [документацию по объектам представления](https://python-all.ru/3.11/library/stdtypes.html#dict-views).5859#### `lookup(name)`6061Выполняет поиск *name* в таблице и возвращает экземпляр [`Symbol`](https://python-all.ru/3.11/library/symtable.html#symtable.Symbol).6263#### `get_symbols()`6465Возвращает список экземпляров [`Symbol`](https://python-all.ru/3.11/library/symtable.html#symtable.Symbol) для имён в таблице.6667#### `get_children()`6869Возвращает список вложенных таблиц символов.7071#### `class symtable.Function`7273Пространство имён для функции или метода. Этот класс наследует от [`SymbolTable`](https://python-all.ru/3.11/library/symtable.html#symtable.SymbolTable).7475#### `get_parameters()`7677Возвращает кортеж, содержащий имена параметров этой функции.7879#### `get_locals()`8081Возвращает кортеж с именами локальных переменных этой функции.8283#### `get_globals()`8485Возвращает кортеж с именами глобальных переменных этой функции.8687#### `get_nonlocals()`8889Возвращает кортеж с именами нелокальных переменных в этой функции.9091#### `get_frees()`9293Возвращает кортеж с именами свободных переменных в этой функции.9495#### `class symtable.Class`9697Пространство имён класса. Этот класс наследует от [`SymbolTable`](https://python-all.ru/3.11/library/symtable.html#symtable.SymbolTable).9899#### `get_methods()`100101Возвращает кортеж с именами методов, объявленных в классе.102103#### `class symtable.Symbol`104105Запись в [`SymbolTable`](https://python-all.ru/3.11/library/symtable.html#symtable.SymbolTable), соответствующая идентификатору в исходном коде. Конструктор не является публичным.106107#### `get_name()`108109Возвращает имя символа.110111#### `is_referenced()`112113Возвращает `True`, если символ используется в своём блоке.114115#### `is_imported()`116117Возвращает `True`, если символ создан оператором import.118119#### `is_parameter()`120121Возвращает `True`, если символ является параметром.122123#### `is_global()`124125Возвращает `True`, если символ является глобальным.126127#### `is_nonlocal()`128129Возвращает `True`, если символ является нелокальным.130131#### `is_declared_global()`132133Возвращает `True`, если символ объявлен глобальным с помощью инструкции global.134135#### `is_local()`136137Возвращает `True`, если символ является локальным для своего блока.138139#### `is_annotated()`140141Возвращает `True`, если символ аннотирован.142143Новое в версии 3.6.144145#### `is_free()`146147Возвращает `True`, если символ используется (на него ссылаются) в своём блоке, но не присваивается ему.148149#### `is_assigned()`150151Возвращает `True`, если символу присваивается значение в его блоке.152153#### `is_namespace()`154155Возвращает `True`, если связывание имени вводит новое пространство имён.156157Если имя используется как цель в инструкции функции или класса, это будет истинно.158159Например:160161```python162>>> table = symtable.symtable("def some_func(): pass", "string", "exec")163>>> table.lookup("some_func").is_namespace()164True165```166167Обратите внимание, что одно имя может быть связано с несколькими объектами. Если результат равен `True`, имя также может быть связано с другими объектами, такими как int или list, которые не вводят новое пространство имён.168169#### `get_namespaces()`170171Возвращает список пространств имён, связанных с этим именем.172173#### `get_namespace()`174175Возвращает пространство имён, связанное с этим именем. Если с этим именем связано более одного пространства имён или ни одного, вызывается [`ValueError`](https://python-all.ru/3.11/library/exceptions.html#ValueError).176