多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](symbol.xhtml "symbol --- 与 Python 解析树一起使用的常量") | - [上一页](ast.xhtml "ast --- 抽象语法树") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [Python 语言服务](language.xhtml) » - $('.inline-search').show(0); | # [`symtable`](#module-symtable "symtable: Interface to the compiler's internal symbol tables.") --- Access to the compiler's symbol tables **Source code:** [Lib/symtable.py](https://github.com/python/cpython/tree/3.7/Lib/symtable.py) \[https://github.com/python/cpython/tree/3.7/Lib/symtable.py\] - - - - - - Symbol tables are generated by the compiler from AST just before bytecode is generated. The symbol table is responsible for calculating the scope of every identifier in the code. [`symtable`](#module-symtable "symtable: Interface to the compiler's internal symbol tables.") provides an interface to examine these tables. ## Generating Symbol Tables `symtable.``symtable`(*code*, *filename*, *compile\_type*)Return the toplevel [`SymbolTable`](#symtable.SymbolTable "symtable.SymbolTable") for the Python source *code*. *filename* is the name of the file containing the code. *compile\_type* is like the *mode* argument to [`compile()`](functions.xhtml#compile "compile"). ## Examining Symbol Tables *class* `symtable.``SymbolTable`A namespace table for a block. The constructor is not public. `get_type`()Return the type of the symbol table. Possible values are `'class'`, `'module'`, and `'function'`. `get_id`()Return the table's identifier. `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()`](#symtable.SymbolTable.get_type "symtable.SymbolTable.get_type") returns `'module'`). `get_lineno`()Return the number of the first line in the block this table represents. `is_optimized`()Return `True` if the locals in this table can be optimized. `is_nested`()Return `True` if the block is a nested class or function. `has_children`()Return `True` if the block has nested namespaces within it. These can be obtained with [`get_children()`](#symtable.SymbolTable.get_children "symtable.SymbolTable.get_children"). `has_exec`()Return `True` if the block uses `exec`. `get_identifiers`()Return a list of names of symbols in this table. `lookup`(*name*)Lookup *name* in the table and return a [`Symbol`](#symtable.Symbol "symtable.Symbol") instance. `get_symbols`()Return a list of [`Symbol`](#symtable.Symbol "symtable.Symbol") instances for names in the table. `get_children`()Return a list of the nested symbol tables. *class* `symtable.``Function`A namespace for a function or method. This class inherits [`SymbolTable`](#symtable.SymbolTable "symtable.SymbolTable"). `get_parameters`()Return a tuple containing names of parameters to this function. `get_locals`()Return a tuple containing names of locals in this function. `get_globals`()Return a tuple containing names of globals in this function. `get_frees`()Return a tuple containing names of free variables in this function. *class* `symtable.``Class`A namespace of a class. This class inherits [`SymbolTable`](#symtable.SymbolTable "symtable.SymbolTable"). `get_methods`()Return a tuple containing the names of methods declared in the class. *class* `symtable.``Symbol`An entry in a [`SymbolTable`](#symtable.SymbolTable "symtable.SymbolTable") corresponding to an identifier in the source. The constructor is not public. `get_name`()Return the symbol's name. `is_referenced`()Return `True` if the symbol is used in its block. `is_imported`()Return `True` if the symbol is created from an import statement. `is_parameter`()Return `True` if the symbol is a parameter. `is_global`()Return `True` if the symbol is global. `is_declared_global`()Return `True` if the symbol is declared global with a global statement. `is_local`()Return `True` if the symbol is local to its block. `is_free`()Return `True` if the symbol is referenced in its block, but not assigned to. `is_assigned`()Return `True` if the symbol is assigned to in its block. `is_namespace`()Return `True` if name binding introduces new namespace. If the name is used as the target of a function or class statement, this will be true. 例如: ``` >>> table = symtable.symtable("def some_func(): pass", "string", "exec") >>> table.lookup("some_func").is_namespace() True ``` Note that a single name can be bound to multiple objects. If the result is `True`, the name may also be bound to other objects, like an int or list, that does not introduce a new namespace. `get_namespaces`()Return a list of namespaces bound to this name. `get_namespace`()Return the namespace bound to this name. If more than one namespace is bound, [`ValueError`](exceptions.xhtml#ValueError "ValueError") is raised. ### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](symbol.xhtml "symbol --- 与 Python 解析树一起使用的常量") | - [上一页](ast.xhtml "ast --- 抽象语法树") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [Python 语言服务](language.xhtml) » - $('.inline-search').show(0); | © [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation. Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/) 最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)? 使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。