32.3. symtable
- 访问编译器的符号表¶
源代码: Lib / symtable.py
在生成字节码之前,编译器从AST生成符号表。符号表负责计算代码中每个标识符的范围。symtable
提供了一个接口来检查这些表。
32.3.1. Generating Symbol Tables¶
-
symtable.
symtable
(code, filename, compile_type)¶ 返回对于Python源代码代码的toplevel
SymbolTable
。filename是包含代码的文件的名称。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
()¶ 返回此表中的符号名称列表。
-
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
。
-