symtable --- 存取編譯器的符號表¶
原始碼:Lib/symtable.py
符號表 (symbol table) 是在生成位元組碼 (bytecode) 之前由編譯器從 AST 生成的。符號表負責計算程式碼中每個識別器 (identifier) 的作用域。symtable 提供了一個介面來檢查這些表。
產生符號表¶
- symtable.symtable(code, filename, compile_type)¶
回傳 Python 原始 code 的頂層
SymbolTable。filename 是包含程式碼之檔案之名稱。compile_type 類似於compile()的 mode 引數。
檢查符號表¶
- class symtable.SymbolTableType¶
表明
SymbolTable物件型別的列舉。- MODULE = "module"¶
用於模組的符號表。
- FUNCTION = "function"¶
用於函式的符號表。
- CLASS = "class"¶
用於類別的符號表。
以下成員代表不同風格的註釋作用域。
- ANNOTATION = "annotation"¶
如果
from __future__ import annotations處於活動狀態,則用於註解。
- TYPE_PARAMETERS = "type parameters"¶
- TYPE_VARIABLE = "type variable"¶
用於形式意義上 (formal sense) 的繫結、約束元組 (constraint tuple) 或單一型別變數的預設值的符號表,即 TypeVar、TypeVarTuple 或 ParamSpec 物件(後兩者不支援繫結或約束元組)。
在 3.13 版被加入.
- class symtable.SymbolTable¶
一個區塊 (block) 的命名空間表 (namespace table) 。建構函式 (constructor) 並不公開。
- get_type()¶
回傳符號表的類型。可能的值為
SymbolTableType列舉的成員。在 3.12 版的變更: 新增了
'annotation'、'TypeVar bound'、'type alias'和'type parameter'作為可能的回傳值。在 3.13 版的變更: 回傳值是
SymbolTableType列舉的成員。回傳字串的確切值在未來可能會發生變化,因此建議使用
SymbolTableType成員而不是寫死 (hard-coded) 字串。
- get_id()¶
回傳表的識別器。
- get_name()¶
回傳表的名稱。如果表用於類別,則這是類別的名稱;如果表用於函式,則這是函式的名稱;如果表是全域的,則為
'top'(get_type()會回傳'module')。對於型別參數作用域(用於泛型類別、函式和型別別名),它是底層類別、函式或型別別名的名稱。對於型別別名作用域,它是型別別名的名稱。對於TypeVar綁定作用域,它會是TypeVar的名稱。
- get_lineno()¶
回傳此表所代表的區塊中第一行的編號。
- is_optimized()¶
如果可以最佳化該表中的區域變數,則回傳
True。
- is_nested()¶
如果區塊是巢狀類別或函式,則回傳
True。
- has_children()¶
如果區塊內有巢狀命名空間,則回傳
True。這些可以透過get_children()獲得。
- get_children()¶
回傳巢狀符號表的串列。
- class symtable.Function¶
一個函式或方法的命名空間。該類別繼承自
SymbolTable。- get_parameters()¶
回傳一個包含此函式參數名稱的元組 (tuple)。
- get_locals()¶
回傳一個包含此函式中區域變數 (locals) 名稱的元組。
- get_globals()¶
回傳一個包含此函式中全域變數 (globals) 名稱的元組。
- get_nonlocals()¶
回傳一個包含此函式中明確宣告的非區域變數 (nonlocals) 名稱的元組。
- get_frees()¶
回傳一個包含此函式中的自由(閉包)變數 (free (closure) variables) 名稱的元組。
- class symtable.Class¶
一個類別的命名空間。該類別繼承自
SymbolTable。- get_methods()¶
回傳一個包含類別中聲明的類似方法之函式名稱的元組。
在這裡,術語「方法 (method)」表示透過
def或async def在類別主體中定義的任何函式。get_methods()不會取得更深作用域內定義的函式(例如在內部類別中)。舉例來說:
>>> import symtable >>> st = symtable.