<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            16.6. 動態導入模塊

            好了,大道理談夠了。讓我們談談動態導入模塊吧。

            首先,讓我們看一看正常的模塊導入。import module 語法查看搜索路徑,根據給定的名字尋找模塊并導入它們。你甚至可以這樣做:以逗號分割同時導入多個模塊,本章代碼前幾行就是這樣做的。

            例 16.13. 同時導入多個模塊

            
            import sys, os, re, unittest 1
            
            1 這里同時導入四個模塊:sys (為系統函數和得到命令行參數)、os (為目錄列表之類的操作系統函數)、re (為正則表達式),以及 unittest (為單元測試)。

            現在讓我們用動態導入做同樣的事。

            例 16.14. 動態導入模塊

            >>> sys = __import__('sys')           1
            >>> os = __import__('os')
            >>> re = __import__('re')
            >>> unittest = __import__('unittest')
            >>> sys                               2
            >>> <module 'sys' (built-in)>
            >>> os
            >>> <module 'os' from '/usr/local/lib/python2.2/os.pyc'>
            
            1 內建 __import__ 函數與 import 語句的既定目標相同,但它是一個真正的函數,并接受一個字符串參數。
            2 變量 sys 現在是 sys 模塊,和 import sys 的結果完全相同。變量 os 現在是一個 os 模塊,等等。

            因此 __import__ 導入一個模塊,但是是通過一個字符串參數來做到的。依此處講,你用以導入的僅僅是一個硬編碼性的字符串,但它可以是一個變量,或者一個函數調用的結果。并且你指向模塊的變量也不必與模塊名匹配。你可以導入一系列模塊并把它們指派給一個列表。

            例 16.15. 動態導入模塊列表

            >>> moduleNames = ['sys', 'os', 're', 'unittest'] 1
            >>> moduleNames
            ['sys', 'os', 're', 'unittest']
            >>> modules = map(__import__, moduleNames)        2
            >>> modules                                       3
            [<module 'sys' (built-in)>,
            <module 'os' from 'c:\Python22\lib\os.pyc'>,
            <module 're' from 'c:\Python22\lib\re.pyc'>,
            <module 'unittest' from 'c:\Python22\lib\unittest.pyc'>]
            >>> modules[0].version                            4
            '2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'
            >>> import sys
            >>> sys.version
            '2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'
            
            1 moduleNames 只是一個字符串列表。沒什么特別的,只是這些名字剛好是你可應需而用的可導入模塊名。
            2 簡單得令人驚奇,通過映射 __import__ 就實現了導入。記住,列表 (moduleNames) 的每個元素將被用來一次次調用函數 (__import__) 并以一個返回值構成的列表作為返回結果。
            3 所以現在你已經由一個字符串列表構建起了一個實際模塊的列表。(你的路徑可能不同,這取決于你的操作系統、你安裝 Python 的位置、月亮殘缺的程度等等。)
            4 從這些是真實模塊這一點出發,讓我們來看一些模塊屬性。記住,modules[0] sys 模塊,因此,modules[0].version sys.version。所有模塊的其他屬性和方法也都可用。import 語句沒什么神奇的,模塊也沒什么神奇的。模塊就是對象,一切都是對象。

            現在,你應該能夠把這一切放在一起,并搞清楚本章大部分樣例代碼是做什么的。

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线