https://blog.csdn.net/maryhuan/article/details/22048763
內建模塊可以通過 "dir(__builtins__)" 查看Python中的內建函數
包(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文件夾下。
————————————————
版權聲明:本文為CSDN博主「Maryhuan」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/maryhuan/article/details/22048763