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

源代码: Lib/symtable.py


符号表是在字节码生成之前由编译器从AST生成的。符号表负责计算代码中每个标识符的作用域。 symtable 提供用于检查这些表的接口。

生成符号表

symtable.symtable(code, filename, compile_type)

返回顶层 SymbolTable 对于python源 code . filename 是包含代码的文件的名称。 compile_type 就像是 mode 参数 compile() .

检查符号表

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() .

get_identifiers()

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

lookup(name)

查找 name 在表中并返回 Symbol 实例。

get_symbols()

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

get_children()

返回嵌套符号表的列表。

class symtable.Function

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

get_parameters()

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

get_locals()

返回一个包含此函数中局部变量名称的元组。

get_globals()

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

get_nonlocals()

返回一个包含此函数中非局部变量名称的元组。

get_frees()

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

class symtable.Class

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

get_methods()

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

class symtable.Symbol

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

get_name()

返回符号的名称。

is_referenced()

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

is_imported()

返回 True 如果符号是从导入语句创建的。

is_parameter()

返回 True 如果符号是参数。

is_global()

返回 True 如果符号是全局的。

is_nonlocal()

返回 True 如果符号是非本地的。

is_declared_global()

返回 True 如果符号用全局语句声明为全局。

is_local()

返回 True 如果符号是其块的本地符号。

is_annotated()

返回 True 如果符号已注释。

3.6 新版功能.

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或list。

get_namespaces()

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

get_namespace()

返回绑定到此名称的命名空间。如果绑定了多个命名空间, ValueError 提高了。