新聞中心
symtable ——訪問編譯器的符號(hào)表
Source code: Lib/symtable.py

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的魚峰網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
符號(hào)表由編譯器在生成字節(jié)碼之前根據(jù) AST 生成。符號(hào)表負(fù)責(zé)計(jì)算代碼中每個(gè)標(biāo)識(shí)符的作用域。 symtable 提供了一個(gè)查看這些表的接口。
符號(hào)表的生成
symtable.symtable(code, filename, compile_type)
返回 python 源 代碼 頂層的 SymbolTable。filename 是代碼文件名。 compile_type 的含義類似 compile() 的 mode 參數(shù)。
符號(hào)表的查看
class symtable.SymbolTable
某個(gè)代碼塊的命名空間表。構(gòu)造函數(shù)不公開。
-
get_type()
返回符號(hào)表的類型??赡苁?
'class'、'module'或'function'。 -
get_id()
返回符號(hào)表的標(biāo)識(shí)符
-
get_name()
返回符號(hào)表的名稱。 若為類的符號(hào)表則返回類名;若為函數(shù)的符號(hào)表則為函數(shù)名;若是全局符號(hào)表則為
'top'(get_type() 返回'module')。 -
get_lineno()
返回符號(hào)表所代表代碼塊的第一行編號(hào)。
-
is_optimized()
如果符號(hào)表中的局部變量可能被優(yōu)化過,則返回
True。 -
is_nested()
如果代碼塊是嵌套類或函數(shù),則返回
True。 -
has_children()
如果代碼塊中有嵌套的命名空間,則返回
True??赏ㄟ^ get_children() 讀取。 -
get_identifiers()
返回一個(gè)包含表中符號(hào)名稱的視圖對(duì)象。 參見 視圖對(duì)象文檔。
-
lookup(name)
在符號(hào)表中查找 name 并返回一個(gè) Symbol 實(shí)例。
-
get_symbols()
返回符號(hào)表中所有符號(hào)的 Symbol 實(shí)例的列表。
-
get_children()
返回嵌套符號(hào)表的列表。
class symtable.Function
函數(shù)或方法的命名空間。該類繼承自 SymbolTable。
-
get_parameters()
返回由函數(shù)的參數(shù)名組成的元組。
-
get_locals()
返回函數(shù)中局部變量名組成的元組。
-
get_globals()
返回函數(shù)中全局變量名組成的元組。
-
get_nonlocals()
返回函數(shù)中非局部變量名組成的元組。
-
get_frees()
返回函數(shù)中自由變量名組成的元組。
class symtable.Class
類的命名空間。繼承自 SymbolTable。
-
get_methods()
返回類中聲明的方法名組成的元組。
class symtable.Symbol
SymbolTable 中的數(shù)據(jù)項(xiàng),對(duì)應(yīng)于源碼中的某個(gè)標(biāo)識(shí)符。構(gòu)造函數(shù)不公開。
-
get_name()
返回符號(hào)名
-
is_referenced()
如果符號(hào)在代碼塊中被引用了,則返回
True。 -
is_imported()
如果符號(hào)是由導(dǎo)入語(yǔ)句創(chuàng)建的,則返回
True。 -
is_parameter()
如果符號(hào)是參數(shù),返回
True。 -
is_global()
如果符號(hào)是全局變量,則返回
True。 -
is_nonlocal()
如果符號(hào)為非局部變量,則返回
True。 -
is_declared_global()
如果符號(hào)用 global 聲明為全局變量,則返回
True。 -
is_local()
如果符號(hào)是代碼塊內(nèi)的局部變量,則返回
True。 -
is_annotated()
如果符號(hào)帶有注解,則返回
True。3.6 新版功能.
-
is_free()
如果符號(hào)在代碼塊中被引用,但未賦值,則返回
True。 -
is_assigned()
如果符號(hào)在代碼塊中賦值,則返回
True。 -
is_namespace()
如果符號(hào)名綁定引入了新的命名空間,則返回
True。如果符號(hào)名用于函數(shù)或類定義語(yǔ)句,則為 True。
例如:
>>> table = symtable.symtable("def some_func(): pass", "string", "exec")>>> table.lookup("some_func").is_namespace()True
注意,一個(gè)符號(hào)名可以與多個(gè)對(duì)象綁定。如果結(jié)果為
True,則該符號(hào)名還可以綁定到其他對(duì)象上,比如 int 或 list ,且不會(huì)引入新的命名空間。 -
get_namespaces()
返回與符號(hào)名綁定的命名空間的列表。
-
get_namespace()
Return the namespace bound to this name. If more than one or no namespace is bound to this name, a ValueError is raised.
當(dāng)前文章:創(chuàng)新互聯(lián)Python教程:symtable——訪問編譯器的符號(hào)表
分享路徑:http://www.dlmjj.cn/article/dhpojgo.html


咨詢
建站咨詢
