eval、exec和__import__
阿新 • • 發佈:2018-10-31
eval函式
計算指定表示式的值,它不支援語句,例如賦值操作是語句而不是表示式,不能利用eval執行
exec函式
動態執行python程式碼。也就是說exec可以執行復雜的python語句,而不像eval函式那樣只能計算一個表示式的值。
__import__() 函式
用於動態載入類和函式 。如果一個模組經常變化就可以使用 __import__() 來動態載入。
舉例:
建立一個test2.py模組
def a(func): print('a執行') print(time.time()) def b(arg): print('b執行') print(arg) print(time.time()) time.sleep(5)
接下來建立一個test.py模組
module = __import__('test2')
module.a(module.b(1))
程式碼中通過__import__()函式匯入了test2.py,使用module變數對其引用。然後採用模組.函式的方式呼叫了test2模組中的a和b方法。
修改test.py模組的內容為:
exec('from %s import a,b' % 'test2')
eval('a')(eval('b')(1))
這裡利用exec執行了匯入test2模組的語句,然後利用eval執行函式表示式。這裡採用巢狀執行的方式,先帶引數執行b(1)函式,拿到結果後,將結果作為a函式的引數執行。