1. 程式人生 > >eval、exec和__import__

eval、exec和__import__

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函式的引數執行。