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

symtable.md

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

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