一、__init__.py的作用:
在使用pydev插件,在eclipse建立package時,會自動在package所在的目錄自動建立一個__init__.py檔案,且檔案内容為空。這個檔案有什麼有呢?
__init__.py的作用有如下幾點:
1. 相當于class中的def __init__(self):函數,用來初始化子產品。
2. 把所在目錄當作一個package處理
3. from-import 語句導入子包時需要用到它。 如果沒有用到, 他們可以是空檔案。
如引入package.module下的所有子產品
from package.module import *
這樣的語句會導入哪些檔案取決于作業系統的檔案系統. 是以我們在__init__.py 中加入 __all__變量.
該變量包含執行這樣的語句時應該導入的子產品的名字. 它由一個子產品名字元串清單組成.
二、python在執行import語句時的步驟
1:建立一個新的,空的module對象(它可能包含多個module);
2:把這個module對象插入sys.module中
3:裝載module的代碼(如果需要,首先必須編譯)
4:執行新的module中對應的代碼。
在執行第3步時,首先要找到module程式所在的位置,其原理為:如果需要導入的module的名字是module1,則解釋器必須找到module1.py。
它首先在目前目錄查找,然後是在環境變量pythonpath中查找。pythonpath可以視為系統的path變量一類的東西,其中包含若幹個目錄。如果pythonpath沒有設定,或者找不到module1.py,則繼續搜尋與python的安裝設定相關的預設路徑,在unix下,通常是/usr/lib64/python2.6/。
事實上,搜尋的順序是:目前路徑 (以及從目前目錄指定的sys.path),然後是pythonpath,然後是python的安裝設定相關的預設路徑。正因為存在這樣的順序,如果目前 路徑或pythonpath中存在與标準module同樣的module,則會覆寫标準module。也就是說,如果目前目錄下存在xml.py,那麼執 行import xml時,導入的是目前目錄下的module,而不是系統标準的xml。