回覆列表
  • 1 # 使用者4347358385164

    包(packages)其實也是模組,其型別Type也是module。通常引用自定義模組時有兩種方法: 1)將兩個檔案放在同一目錄下。 2)在sys.path下新增要引用的py檔案的路徑。然後import。 這樣的做法,對於少數檔案是可行的,但如果程式數目很多,層級很複雜時就比較麻煩了。此時用package就能將多個py檔案組織起來,類似於第三方包一樣的引用。要方便很多。 package的層次結構與程式所在目錄的層次結構相同,且必須包含一個__init__.py的檔案。__init__.py可以為空,只要它存在就表明此目錄被作為一個package處理。 package1/ __init__.py subPack1/ __init__.py module_11.py module_12.py module_13.py subPack2/ __init__.py module_21.py module_22.py …… __init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,__init__.py中也可以設定相應的內容。 好了,現在我們在module_11.py中定義一個函式: def funA(): print "funcA in module_11" return 一.引用模組 在頂層目錄(也就是package1所在的目錄,當然也參考上面的介紹,將package1放在直譯器能夠搜尋到的地方)執行python: >>>from package1.subPack1.module_11 import funcA >>>funcA() funcA in module_11 這樣,我們就按照package的層次關係,正確呼叫了module_11中的函式。 二.使用萬用字元*,匯入某個module中的所有元素 答案就在__init__.py中。我們在subPack1的__init__.py檔案中寫 __all__ = ["module_13", "module_12"] 然後進入python >>>from package1.subPack1 import * >>>module_11.funcA() Traceback (most recent call last): File "", line 1, in ImportError: No module named module_11 也就是說,以*匯入時,package內的module是受__init__.py限制的。 三.在package內部互相呼叫。 1.如果希望呼叫同一個package中的module,則直接import即可。也就是說,在module_12.py中,可以直接使用 import module_11 2.如果不在同一個package中,例如我們希望在module_21.py中呼叫module_11.py中的FuncA,則應該這樣: from module_11包名.module_11 import funcA 四.Python如何找到我們定義的module? 在標準包sys中path屬性記錄了Python的包路徑。 import sys print(sys.path) 通常我們可以將module的包路徑放到環境變數PYTHONPATH中,該環境變數會自動新增到sys.path屬性. 另一種方便的方法是程式設計中直接指定我們的module路徑到sys.path 中。 常用的話也可以放在python27\lib\site-packages資料夾下。

  • 中秋節和大豐收的關聯?
  • 如何從科學的角度詮釋“八卦”?