Python中包、模塊詳解
模塊:一個py文件就是一個模塊
當代碼越來越多的時候,將所有的代碼放入一個.py文件中會顯得難以維護。解決辦法則是代碼分拆入不同的.py文件中,形成不同模塊,這樣做還能使得同名變數互不影響,需要注意的是,模塊名不應與系統內置函數重名。
可以通過下面的方式導入模塊
import module1import module2import module3import module1,module2,module3
這兩種方式的效果是一樣的,但是第一種可讀性比第二種好,推薦按照下面的順序導入模塊,並且一般在文件首部導入所有的模塊
導入模塊,就可重用這些函數和變數。一般用module_name.fun_name,和module_name.var_name進行使用。這樣的語義用法使模塊看起來很像類或者名字空間,可將module_name 理解為名字限定符。模塊名就是文件名去掉.py後綴。
導入模塊中的屬性
單行導入
from module import name1,name2,name3
多行導入
from module import name1,name2, name3
導入全部屬性(由於容易覆蓋當前名稱空間中現有的名字,所以一般不推薦使用,適合模塊中變數名很長並且變數很多的情況)
from module import *
如果你不想某個模塊的屬性被以上方法導入,可以給該屬性名稱前加一個下劃線
包:一個文件夾就是一個包,一個包中有多個模塊
不同的.py文件也可能同名,這時候就可以考慮將其放入不同的文件夾中,形成不同的包,防止同名模塊的影響。
區別包和文件夾的重要特徵就是包文件夾內每一層目錄都有初始化文件__init__.py!
__init__.py可以是空文件,也可以有Python代碼,因為__init__.py本身就是一個模塊,而它的模塊名就是包的名稱! 所以導入一個包的時候,實際上導入的是這個包文件夾下面的__init__.py文件
一個帶__init__.py的目錄算一個包
可以這樣導入:
from app.a import afrom app.b.b import testa.test()test()
上面代碼表示:導入app包的子包a和子包b的屬性test,然後分別調用test方法。
python默認是使用ASCII編碼,可以指定編碼方式,如
#!/usr/bin/env python#coding=utf-8
或者
#!/usr/bin/env python# -*- coding:utf-8 -*-
4. 解決導入循環問題 有下面兩個模塊,a.py和b.py
a.py#!/usr/bin/env python#coding=utf-8import bif __name__ == __main: print hello,Im a
b.py
#!/usr/bin/env python#coding=utf-8import aif __name__ == __main: print hello,Im b
在這裡a嘗試導入b,而b也嘗試導入a,導入一個先前沒有完全導入的模塊,會導致導入失敗。解決辦法:移除一個導入語句,把導入語句放到函數內部,在需要的時候導入。
b.py#!/usr/bin/env python#coding=utf-8if __name__ == __main: import a print hello,Im b
推薦閱讀:
※萌新刷題(六)旋轉字元串
※python如何理解map,reduce,filter?
※如何看待 MATLAB R2015a 開始支持調用 Python?
※巧妙使用 TensorFlow 之 TensorLayer
※全網最全的NotePad++配置(適用於Python程序設計)
TAG:Python |