<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    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 語句沒什么神奇的,模塊也沒什么神奇的。模塊就是對象,一切都是對象。

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

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频