symtable- 访问编译器的符号表 – Python语言服务(Python教程)(参考资料)
symtable– 访问编译器的符号表
源代码: Lib / symtable.py
符号表由编译器在生成字节码之前从AST生成。符号表负责计算代码中每个标识符的范围。symtable提供了一个界面来检查这些表格.
生成符号表
参数检查符号表
- class
symtable.SymbolTable - 一个块的命名空间表。构造函数不公开.
get_id()- 返回表格的标识符.
get_lineno()- 返回此表所代表的块中第一行的编号.
is_optimized()- 返回
True如果此表中的本地人可以优化.
is_nested()- 返回
True如果块是嵌套的类或函数.
has_children()- 如果块中有嵌套的命名空间,则返回
True。这些可以用get_children().
has_exec()- 获得
True如果块使用exec.
get_identifiers()- 返回此表中的符号名称列表.
lookup(name)- 在表中找到name并返回
Symbolinstance.
get_symbols()- 返回
Symbol列表中的名称.
get_children()- 返回嵌套符号表的列表.
- class
symtable.Function - 函数或方法的命名空间。该类继承
SymbolTable.get_parameters()- 将包含参数名称的元组返回给该函数.
get_locals( )- 在这个函数中返回一个包含locals名字的元组.
get_globals()- 在这个函数中返回一个包含全局变量名的元组.
get_frees()- 在此函数中返回包含自由变量名称的元组.
- class
symtable.Class - 类的命名空间。这个类继承了
SymbolTable.get_methods()- 返回一个包含类中声明的方法名称的元组.
- class
symtable.Symbol - 一个条目
SymbolTable对应于源中的标识符。构造函数不公开get_name()- 返回符号的名称.
is_referenced()- 返回
True如果符号用在它的块中
is_imported()- 返回
True如果符号是从import语句创建的.
is_parameter()- 如果符号是参数,则返回
True.
is_global()- 如果符号是全局的,请返回
True
is_declared_global()- 如果符号被全局声明声明为全局,则返回
True.
is_local()- 返回
True如果符号是其块的本地符号
is_free()- 返回
True如果符号在其块中引用,但未分配给
is_assigned()- 返回
True如果符号被分配到它的块中
is_namespace()- 返回
True如果名称绑定引入了新的命名空间如果名称用作函数或类语句的目标,那么这将是真的.
例如:
>>> table = symtable.symtable("def some_func(): pass", "string", "exec") >>> table.lookup("some_func").is_namespace() True注意一个单个名称可以绑定到多个对象。如果结果是
True,那么名称也可以绑定到其他对象,比如int orlist,不会引入新的命名空间.
get_namespaces()- 返回绑定到此名称的命名空间列表.
get_namespace()- 返回绑定到此名称的命名空间。如果有多个命名空间被绑定,则
ValueError被提升.
评论被关闭。