包含有模塊闷堡,模塊是一個(gè)一個(gè)py文件蹬挤,包中可以含有多個(gè)py文件,可以import 包名.模塊名倦零。
區(qū)分包和普通目錄:包下面必須有一__init.__.py文件吨悍,即使它是個(gè)空文件,每個(gè)包下邊需要有__init__.py文件育瓜,注意每層都要有!
14.1 python之導(dǎo)入模塊
要使用一個(gè)模塊恋脚,我們必須首先導(dǎo)入該模塊焰手。Python使用import語句導(dǎo)入一個(gè)模塊。例如船响,導(dǎo)入系統(tǒng)自帶的模塊math:
import math
你可以認(rèn)為math就是一個(gè)指向已導(dǎo)入模塊的變量躲履,通過該變量,我們可以訪問math模塊中所定義的所有公開的函數(shù)工猜、變量和類:
>>> math.pow(2, 0.5) # pow是函數(shù)
1.4142135623730951
>>> math.pi # pi是變量
3.141592653589793
如果我們只希望導(dǎo)入用到的math模塊的某幾個(gè)函數(shù)域慷,而不是所有函數(shù),可以用下面的語句:
from math import pow, sin, log
這樣犹褒,可以直接引用pow, sin, log?這3個(gè)函數(shù)弛针,但math的其他函數(shù)沒有導(dǎo)入進(jìn)來:
>>> pow(2, 10)
1024.0
>>> sin(3.14)
0.0015926529164868282
如果遇到名字沖突怎么辦削茁?比如math模塊有一個(gè)log函數(shù)掉房,logging模塊也有一個(gè)log函數(shù)慰丛,如果同時(shí)使用,如何解決名字沖突诅病?
如果使用import導(dǎo)入模塊名,由于必須通過模塊名引用函數(shù)名蝇棉,因此不存在沖突:
import math, logging
print math.log(10)# 調(diào)用的是math的log函數(shù)logging.
log(10, 'something')# 調(diào)用的是logging的log函數(shù)
如果使用 from...import 導(dǎo)入 log函數(shù)芥永,勢必引起沖突。這時(shí)板辽,可以給函數(shù)起個(gè)“別名”來避免沖突:
from math import log
from logging import log as logger# logging的log現(xiàn)在變成了logger
print log(10)# 調(diào)用的是math的log
logger(10, 'import from logging')# 調(diào)用的是logging的log.
14.2 python中動(dòng)態(tài)導(dǎo)入模塊
如果導(dǎo)入的模塊不存在棘催,Python解釋器會(huì)報(bào)ImportError?錯(cuò)誤,有的時(shí)候瓶您,兩個(gè)不同的模塊提供了相同的功能纲仍,比如StringIO?和cStringIO?都提供了StringIO這個(gè)功能。這是因?yàn)镻ython是動(dòng)態(tài)語言夜赵,解釋執(zhí)行乡革,因此Python代碼運(yùn)行速度慢。
如果要提高Python代碼的運(yùn)行速度沸版,最簡單的方法是把某些關(guān)鍵函數(shù)用C語言重寫视粮,這樣就能大大提高執(zhí)行速度。同樣的功能蕾殴,StringIO?是純Python代碼編寫的岛啸,而cStringIO?部分函數(shù)是C 寫的茴肥,因此 cStringIO 運(yùn)行速度更快。
利用ImportError錯(cuò)誤瞬铸,我們經(jīng)常在Python中動(dòng)態(tài)導(dǎo)入模塊:
try:
? ? from cStringIO import StringIO
except ImportError:
? ? from StringIO import StringIO
上述代碼先嘗試從cStringIO導(dǎo)入芬首,如果失敗了(比如cStringIO沒有被安裝),再嘗試從StringIO導(dǎo)入赦政。這樣耀怜,如果cStringIO模塊存在,則我們將獲得更快的運(yùn)行速度掰派,如果cStringIO不存在左痢,則頂多代碼運(yùn)行速度會(huì)變慢,但不會(huì)影響代碼的正常執(zhí)行略步。
try?的作用是捕獲錯(cuò)誤定页,并在捕獲到指定錯(cuò)誤時(shí)執(zhí)行except?語句。
14.3 python之使用__future__
Python的新版本會(huì)引入新的功能典徊,但是卒落,實(shí)際上這些功能在上一個(gè)老版本中就已經(jīng)存在了。要“試用”某一新的特性儡毕,就可以通過導(dǎo)入__future__模塊的某些功能來實(shí)現(xiàn)。
例如贾费,Python 2.7的整數(shù)除法運(yùn)算結(jié)果仍是整數(shù):
>>> 10 / 3
3
但是檐盟,Python 3.x已經(jīng)改進(jìn)了整數(shù)的除法運(yùn)算,“/”除將得到浮點(diǎn)數(shù)导犹,“//”除才仍是整數(shù):
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
要在Python 2.7中引入3.x的除法規(guī)則羡忘,導(dǎo)入__future__的division:
>>> from __future__ import division
>>> print 10 / 3
3.3333333333333335
當(dāng)新版本的一個(gè)特性與舊版本不兼容時(shí),該特性將會(huì)在舊版本中添加到__future__中节猿,以便舊的代碼能在舊版本中測試新特性漫雕。
14.4 python安裝第三方模塊
python提供了兩種安裝第三方模塊的管理工具:
1.easy_install
2.pip (推薦)
CMD中輸入pip install xxx.py安裝第三方模塊xxx.py
pypi.python.org中查找下載第三方模塊。