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

symtable.md

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

1> **Источник:** https://python-all.ru/3.1/library/symtable.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 30.3. `symtable` – Доступ к таблицам символов компилятора89Таблицы символов генерируются компилятором из AST непосредственно перед генерацией байт-кода. Таблица символов отвечает за вычисление области видимости каждого идентификатора в коде. `symtable` предоставляет интерфейс для изучения этих таблиц.1011## 30.3.1. Генерация таблиц символов1213#### `symtable.symtable(code, filename, compile_type)`1415Возвращает корневой объект1617[`SymbolTable`](https://python-all.ru/3.1/library/symtable.html#symtable.SymbolTable)1819для исходного кода Python2021*code*2223.2425*filename*2627– это имя файла, содержащего код.2829*compile\_type*3031аналогичен аргументу3233*mode*3435функции3637[`compile()`](https://python-all.ru/3.1/library/functions.html#compile)3839.4041## 30.3.2. Изучение таблиц символов4243#### `class symtable.SymbolTable`4445Таблица пространства имён для блока. Конструктор не является открытым.4647#### `get_type()`4849Возвращает тип таблицы символов. Возможные значения:5051`'class'`5253,5455`'module'`5657и5859`'function'`6061.6263#### `get_id()`6465Возвращает идентификатор таблицы.6667#### `get_name()`6869Возвращает имя таблицы. Это имя класса, если таблица предназначена для класса; имя функции, если таблица предназначена для функции; или7071`'top'`7273, если таблица глобальная (7475[`get_type()`](https://python-all.ru/3.1/library/symtable.html#symtable.SymbolTable.get_type)7677возвращает7879`'module'`8081).8283#### `get_lineno()`8485Возвращает номер первой строки в блоке, который представляет эта таблица.8687#### `is_optimized()`8889Возвращает9091`True`9293, если локальные переменные в этой таблице могут быть оптимизированы.9495#### `is_nested()`9697Возвращает9899`True`100101, если блок является вложенным классом или функцией.102103#### `has_children()`104105Возвращает106107`True`108109, если блок содержит вложенные пространства имён. Их можно получить с помощью110111[`get_children()`](https://python-all.ru/3.1/library/symtable.html#symtable.SymbolTable.get_children)112113.114115#### `has_exec()`116117Возвращает118119`True`120121, если блок использует122123`exec`124125.126127#### `has_import_star()`128129Возвращает130131`True`132133, если блок использует импорт со звёздочкой (from-import \*).134135#### `get_identifiers()`136137Возвращает список имён символов в этой таблице.138139#### `lookup(name)`140141Выполняет поиск142143*name*144145в таблице и возвращает экземпляр146147[`Symbol`](https://python-all.ru/3.1/library/symtable.html#symtable.Symbol)148149.150151#### `get_symbols()`152153Возвращает список экземпляров154155[`Symbol`](https://python-all.ru/3.1/library/symtable.html#symtable.Symbol)156157для имён в таблице.158159#### `get_children()`160161Возвращает список вложенных таблиц символов.162163#### `class symtable.Function`164165Пространство имён для функции или метода. Этот класс наследует [`SymbolTable`](https://python-all.ru/3.1/library/symtable.html#symtable.SymbolTable).166167#### `get_parameters()`168169Возвращает кортеж, содержащий имена параметров этой функции.170171#### `get_locals()`172173Возвращает кортеж с именами локальных переменных этой функции.174175#### `get_globals()`176177Возвращает кортеж с именами глобальных переменных этой функции.178179#### `get_frees()`180181Возвращает кортеж с именами свободных переменных в этой функции.182183#### `class symtable.Class`184185Пространство имён класса. Этот класс наследует [`SymbolTable`](https://python-all.ru/3.1/library/symtable.html#symtable.SymbolTable).186187#### `get_methods()`188189Возвращает кортеж с именами методов, объявленных в классе.190191#### `class symtable.Symbol`192193Запись в [`SymbolTable`](https://python-all.ru/3.1/library/symtable.html#symtable.SymbolTable), соответствующая идентификатору в исходном коде. Конструктор не является публичным.194195#### `get_name()`196197Возвращает имя символа.198199#### `is_referenced()`200201Возвращает202203`True`204205, если символ используется в своём блоке.206207#### `is_imported()`208209Возвращает210211`True`212213, если символ создан из инструкции import.214215#### `is_parameter()`216217Возвращает218219`True`220221, если символ является параметром.222223#### `is_global()`224225Возвращает226227`True`228229, если символ глобальный.230231#### `is_declared_global()`232233Возвращает234235`True`236237, если символ объявлен глобальным с помощью инструкции global.238239#### `is_local()`240241Возвращает242243`True`244245, если символ является локальным для своего блока.246247#### `is_free()`248249Возвращает250251`True`252253, если символ упоминается в своём блоке, но не присваивается значение.254255#### `is_assigned()`256257Возвращает258259`True`260261, если символу присваивается значение в его блоке.262263#### `is_namespace()`264265Возвращает `True`, если связывание имени создаёт новое пространство имён.266267Если имя используется как цель в инструкции функции или класса, это будет истинно.268269Например:270271```python272>>> table = symtable.symtable("def some_func(): pass", "string", "exec")273>>> table.lookup("some_func").is_namespace()274True275```276277Обратите внимание, что одно имя может быть связано с несколькими объектами. Если результат равен `True`, имя также может быть связано с другими объектами, такими как int или list, которые не создают новое пространство имён.278279#### `get_namespaces()`280281Возвращает список пространств имён, связанных с этим именем.282283#### `get_namespace()`284285Возвращает пространство имён, связанное с этим именем. Если привязано более одного пространства имён, возбуждается286287[`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError)288289.290