symtable
--- Access to the compiler's symbol tables¶
ソースコード: Lib/symtable.py
記号表(symbol table)は、コンパイラが AST からバイトコードを生成する直前に作られます。記号表はコード中の全ての識別子のスコープの算出に責任を持ちます。 symtable
はこうした記号表を調べるインターフェイスを提供します。
記号表の生成¶
- symtable.symtable(code, filename, compile_type)¶
Python ソース code に対するトップレベルの
SymbolTable
を返します。 filename はコードを収めてあるファイルの名前です。 compile_type はcompile()
の mode 引数のようなものです。
記号表の検査¶
- class symtable.SymbolTable¶
ブロックに対する名前空間の記号表。コンストラクタはパブリックではありません。
- get_type()¶
Return the type of the symbol table. Possible values are
'class'
,'module'
, and'function'
.
- get_id()¶
記号表の識別子を返します。
- get_name()¶
Return the table's name. This is the name of the class if the table is for a class, the name of the function if the table is for a function, or
'top'
if the table is global (get_type()
returns'module'
).
- get_lineno()¶
この記号表に対応するブロックの一行目の行番号を返します。
- is_optimized()¶
この記号表に含まれるローカル変数が最適化できるならば
True
を返します。
- is_nested()¶
ブロックが入れ子のクラスまたは関数のとき
True
を返します。
- has_children()¶
ブロックが入れ子の名前空間を含んでいるならば
True
を返します。入れ子の名前空間はget_children()
で得られます。
- get_identifiers()¶
Return a view object containing the names of symbols in the table. See the documentation of view objects.
- get_children()¶
入れ子になった記号表のリストを返します。
- class symtable.Function¶
A namespace for a function or method. This class inherits from
SymbolTable
.- get_parameters()¶
この関数の引数名からなるタプルを返します。
- get_locals()¶
この関数のローカル変数の名前からなるタプルを返します。
- get_globals()¶
この関数のグローバル変数の名前からなるタプルを返します。
- get_nonlocals()¶
Return a tuple containing names of nonlocals in this function.
- get_frees()¶
Return a tuple containing names of free variables in this function.
- class symtable.Class¶
A namespace of a class. This class inherits from
SymbolTable
.- get_methods()¶
Return a tuple containing the names of methods declared in the class.
- class symtable.Symbol¶
SymbolTable
のエントリーでソースの識別子に対応するものです。コンストラクタはパブリックではありません。- get_name()¶
記号の名前を返します。
- is_referenced()¶
記号がそのブロックの中で使われていれば
True
を返します。
- is_imported()¶
記号が import 文で作られたものならば
True
を返します。
- is_parameter()¶
記号がパラメータならば
True
を返します。
- is_global()¶
記号がグローバルならば
True
を返します。
- is_nonlocal()¶
記号が非ローカルならば
True
を返します。
- is_declared_global()¶
記号が global 文によってグローバルであると宣言されているなら
True
を返します。
- is_local()¶
記号がそのブロックに対してローカルならば
True
を返します。
- is_annotated()¶
記号が注釈付きならば
True
を返します。バージョン 3.6 で追加.
- is_free()¶
記号がそのブロックの中で参照されていて、しかし代入は行われないならば
True
を返します。
- is_assigned()¶
記号がそのブロックの中で代入されているならば
True
を返します。
- is_namespace()¶
名前の束縛が新たな名前空間を導入するならば
True
を返します。名前が関数または class 文のターゲットとして使われるならば、真です。
例えば:
>>> table = symtable.symtable("def some_func(): pass", "string", "exec") >>> table.lookup("some_func").is_namespace() True
一つの名前が複数のオブジェクトに束縛されうることに注意しましょう。結果が
True
であったとしても、その名前は他のオブジェクトにも束縛されるかもしれず、それがたとえば整数やリストであれば、そこでは新たな名前空間は導入されません。
- get_namespaces()¶
この名前に束縛された名前空間のリストを返します。
- get_namespace()¶
この名前に束縛された名前空間を返します。この名前に束縛された名前空間が複数あるか一つもないなら
ValueError
が送出されます。