symtable
symtable - 访问编译器的符号表
源代码:
Lib / symtable.py
符号表由AST编译器在字节码生成之前生成。符号表负责计算代码中每个标识符的范围。symtable
提供了一个界面来检查这些表格。
1.生成符号表
symtable.symtable(code, filename, compile_type)
返回SymbolTable
Python源代码
的顶层。filename
是包含代码的文件的名称。compile_type
就像是模式
参数compile()
。
2.检查符号表
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
has_exec()
如果块使用exec,则返回True。
has_import_star()
如果块使用星号的从进口,则返回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()
如果符号是从导入语句创建的,则返回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
。