Python Library在實(shí)際操作中具有十分強(qiáng)大的功能
以下的文章是通過(guò)Python Library: Exec & Compile的相關(guān)實(shí)際操作代碼的介紹來(lái)介紹Python Library在實(shí)際操作的相關(guān)步驟,以下是文章內(nèi)容的具體介紹,希望你在瀏覽完下面的文章會(huì)有所收獲。
直接運(yùn)行代碼字符串也是動(dòng)態(tài)語(yǔ)言的一個(gè)重要特征。雖然在 .NET/C# 里也可通過(guò) CodeDom 實(shí)現(xiàn)類(lèi)似的功能,但遠(yuǎn)沒(méi) Python 這么方便自由。
- >>> code = """
- def test(s):
- print "test:", s
- a = 123
- """
- >>> exec code
- >>> a
- 123
- >>> test("abc")
- test: abc
內(nèi)置函數(shù)里還有 eval() 和 execfile() 都是用來(lái)做類(lèi)似事情的。exec 關(guān)鍵字執(zhí)行多行代碼片段,eval() 函數(shù)通常用來(lái)執(zhí)行一條包含返回值的表達(dá)式,而 execfile 自然是用來(lái)執(zhí)行源碼文件了。
- >>> a = 10
- >>> x = eval("a + 3")
- >>> x
- 13
eval() 和 execfile() 都有 "globals, locals" 參數(shù),用于傳遞環(huán)境變量,默認(rèn)或顯式設(shè)置為 None 時(shí)都直接使用 globals() 和 locals() 獲取當(dāng)前作用域的數(shù)據(jù)。
- >>> x = eval("a + b", {}, {})
傳遞空值,使其無(wú)法獲取本地信息
- Traceback (most recent call last):
- File "<pyshell#21>", line 1, in <module>
- x = eval("a + b", {}, {})
- File "<string>", line 1, in <module>
- NameError: name 'a' is not defined
- >>> x = eval("a + b", {}, { "a":123, "b":2})
顯式傳遞環(huán)境信息
- >>> x
- 125
以上文章的內(nèi)容是對(duì)Python Library的實(shí)際相關(guān)應(yīng)用操作過(guò)程中操作的部分介紹。
【編輯推薦】