32.3. symtable - 访问编译器的符号表

源代码: Lib / symtable.py

在生成字节码之前,编译器从AST生成符号表。符号表负责计算代码中每个标识符的范围。symtable提供了一个接口来检查这些表。

32.3.1. Generating Symbol Tables

symtable.symtable(code, filename, compile_type)

返回对于Python源代码代码的toplevel SymbolTablefilename是包含代码的文件的名称。compile_type类似于compile()模式参数。

32.3.2. Examining Symbol Tables

class symtable.SymbolTable

块的命名空间表。构造函数不是公共的。

get_type()

返回符号表的类型。可能的值为'class''module''function'

get_id()

返回表的标识符。

get_name()

返回表的名称。这是类的名称,如果表是一个类,函数的名称,如果表是一个函数,或'top'如果表是全局的(get_type()返回'module')。

get_lineno()

返回此表所表示的块中第一行的数字。

is_optimized()

如果可以优化此表中的本地化,则返回True

is_nested()

如果块是嵌套类或函数,则返回True

has_children()

如果块在其中嵌套命名空间,则返回True这些可以通过get_children()获得。

has_exec()

如果块使用exec,则返回True

get_identifiers()

返回此表中的符号名称列表。

lookup(name)

在表中查找名称,并返回Symbol实例。

get_symbols()

返回表中名称的Symbol实例的列表。

get_children()

返回嵌套符号表的列表。

class symtable.Function

函数或方法的命名空间。此类继承SymbolTable

get_parameters()

将包含参数名称的元组返回到此函数。

get_locals()

在此函数中返回包含本地人名称的元组。

get_globals()

在此函数中返回包含全局变量名称的元组。

get_frees()

返回一个包含该函数中自由变量名称的元组。

class symtable.Class

类的命名空间。此类继承SymbolTable

get_methods()

返回一个包含类中声明的方法名称的元组。

class symtable.Symbol

SymbolTable中的条目对应于源中的标识符。构造函数不是公共的。

get_name()

返回符号的名称。

is_referenced()

如果在其块中使用符号,则返回True

is_imported()

如果符号是从import语句创建的,则返回True

is_parameter()

如果符号是参数,则返回True

is_global()

如果符号是全局的,则返回True

is_declared_global()

如果符号已使用全局语句声明为全局,则返回True

is_local()

如果符号位于其块的本地,则返回True

is_free()

如果符号在其块中引用,但未分配给,则返回True

is_assigned()

如果在其块中分配了符号,则返回True

is_namespace()

如果名称绑定引入新的命名空间,则返回True

如果将该名称用作函数或类语句的目标,则为true。

例如:

>>> table = symtable.symtable("def some_func(): pass", "string", "exec")
>>> table.lookup("some_func").is_namespace()
True

请注意,单个名称可以绑定到多个对象。如果结果为True,则该名称也可能绑定到其他对象,如int或list,不会引入新的命名空间。

get_namespaces()

返回绑定到此名称的命名空间的列表。

get_namespace()

返回绑定到此名称的命名空间。如果绑定了多个命名空间,则会引发ValueError