模塊:一個py文件就是一個模塊
當(dāng)代碼越來越多的時候台谊,將所有的代碼放入一個.py文件中會顯得難以維護蓉媳。解決辦法則是代碼分拆入不同的.py文件中,形成不同模塊锅铅,這樣做還能使得同名變量互不影響酪呻,需要注意的是,模塊名不應(yīng)與系統(tǒng)內(nèi)置函數(shù)重名盐须。
可以通過下面的方式導(dǎo)入模塊
import?module1
import?module2
import?module3
import?module1,module2,module3
這兩種方式的效果是一樣的玩荠,但是第一種可讀性比第二種好,推薦按照下面的順序?qū)肽K贼邓,并且一般在文件首部導(dǎo)入所有的模塊
導(dǎo)入模塊阶冈,就可重用這些函數(shù)和變量。一般用module_name.fun_name塑径,和module_name.var_name進行使用女坑。這樣的語義用法使模塊看起來很像類或者名字空間,可將module_name?理解為名字限定符统舀。模塊名就是文件名去掉.py后綴匆骗。
導(dǎo)入模塊中的屬性
單行導(dǎo)入
from?module import?name1,name2,name3
多行導(dǎo)入
from?module import?name1,name2,\
name3
導(dǎo)入全部屬性(由于容易覆蓋當(dāng)前名稱空間中現(xiàn)有的名字,所以一般不推薦使用誉简,適合模塊中變量名很長并且變量很多的情況)
from?module import?*
如果你不想某個模塊的屬性被以上方法導(dǎo)入碉就,可以給該屬性名稱前加一個下劃線
包:一個文件夾就是一個包,一個包中有多個模塊
不同的.py文件也可能同名闷串,這時候就可以考慮將其放入不同的文件夾中瓮钥,形成不同的包,防止同名模塊的影響烹吵。
區(qū)別包和文件夾的重要特征就是包文件夾內(nèi)每一層目錄都有初始化文件__init__.py碉熄!
__init__.py可以是空文件,也可以有Python代碼年叮,因為__init__.py本身就是一個模塊具被,而它的模塊名就是包的名稱!所以導(dǎo)入一個包的時候只损,實際上導(dǎo)入的是這個包文件夾下面的__init__.py文件
一個帶__init__.py的目錄算一個包
可以這樣導(dǎo)入:
from?app.a import?a
from?app.b.b import?test
a.test()
test()
上面代碼表示:導(dǎo)入app包的子包a和子包b的屬性test一姿,然后分別調(diào)用test方法七咧。
python默認是使用ASCII編碼,可以指定編碼方式叮叹,如
#!/usr/bin/env python
#coding=utf-8
或者
#!/usr/bin/env python
# -*- coding:utf-8 -*-
4. 解決導(dǎo)入循環(huán)問題有下面兩個模塊艾栋,a.py和b.py
a.py
#!/usr/bin/env python
#coding=utf-8
import?b
if?__name__ ==?'__main':
print?'hello,I'm a'
1b.py
#!/usr/bin/env python
#coding=utf-8
import?a
if?__name__ ==?'__main':
print?'hello,I'm b'
在這里a嘗試導(dǎo)入b,而b也嘗試導(dǎo)入a蛉顽,導(dǎo)入一個先前沒有完全導(dǎo)入的模塊蝗砾,會導(dǎo)致導(dǎo)入失敗。解決辦法:移除一個導(dǎo)入語句携冤,把導(dǎo)入語句放到函數(shù)內(nèi)部悼粮,在需要的時候?qū)搿?/p>
b.py
#!/usr/bin/env python
#coding=utf-8
if?__name__ ==?'__main':
import?a
print?'hello,I'm b'