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()¶
返回此表中符号的名称列表。
- 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
提高了。