標籤(空格分隔): python
package,module是python中對外發布程式的封裝機制。
既然乙個package就是乙個包含了python檔案的目錄,那麼,如何判定這個資料夾就是乙個package呢?假如在當前目錄有乙個名叫http的空目錄,假如python認為它就是http的package,那麼程式就無法呼叫真正的http包了。
所以python規定,只有當乙個目錄含有
__init__.py
時,才能確定該目錄是乙個合法的package
如果該檔案僅僅是為了判定該目錄是不是乙個包,那麼每個包目錄下有乙個空的且檔名為只要被import的包,模組,符號是屬於乙個package的,那麼這個包的__init__.py
不就可以了? 拿衣服呀~python做了對該檔案做了更加詳細的規定,使得檔案python的匯入過程和該檔案息息相關
__init__.py
就會在之前被import。
比如 package1/subpackage/module.py 中有乙個全域性變數var
import package1.subpackage.module.var
from package1/subpackage import
module
這兩句import語句當中,import都會先import package1的__init__.py
,然後再import subpackage的__init__.py
from *** import yyy
***:
可以是package,module
yyy:
當***是package時,yyy可以是module或package
當***是module時,yyy只能是module內的符號
import ***
這種方式比較簡單,***可以是 package
module symbol
from *** import *
如果***是乙個package,那條語句相當於
import ***.__init__
for i in ***.__init__.__all__:
import i
例子:
#file : ***.__init__
__all__= [package1, module1,symbol]
那麼當執行from *** import *,相當於
import ***.__init__
import package1
import module1
import symbol
p.s. 如果沒有定義__all__
,那麼只有__init__.py
被匯入
如果***是乙個module
在模組(*.py)中使用意為匯出all列表裡的類、函式、變數等成員,reference:否則將匯出moduala中所有不以下劃線開頭(私有)的成員,
在模組中使用all屬性可避免在相互引用時的命名衝突
歡迎使用CSDN markdow
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
歡迎毛毛與妞妞使用CSDN markdown編輯器
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...
歡迎使用CSDN markdow1n編輯器
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...