開(kāi)始Python -- 模塊(Modules) 收藏
1、模塊
(1)Python程序可以作為模塊導入
l 將Python程序保存為.py文件到指定目錄,例如:c:/python/hello.py
# hello.py
print "Hello, world!"
l 告訴Python模塊的位置,一種方法是將.py文件的保存目錄追加到Python的系統路徑中:
>>> import sys
>>> sys.path.append('c:/python')
l 這樣就可以導入程序了(模塊名即.py文件名):
>>> import hello
Hello, world!
l 如果修改了程序,再次導入,程序什么也沒(méi)有做:
>>> import hello
>>>
l 這是因為模塊主要用來(lái)定義變量、函數和類(lèi),只導入一次。
l 要重新導入的方法是使用內建的reload()函數:
>>> hello = reload(hello)
Hello, world!
(2)模塊用來(lái)定義變量、函數和類(lèi)
l 模塊導入后,模塊中定義的變量、函數和類(lèi)可以作為模塊的屬性使用
# hello2.py
def hello():
print "Hello, world!"
>>> import hello2
>>> hello2.hello()
Hello, world!
(3)使你的模塊有效
l 通常不會(huì )像前面的方法一樣編輯sys.path,而是將模塊目錄放到系統默認的路徑中:
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
'C:\\WINDOWS\\system32\\python24.zip',
'D:\\workshop\\Python24\\DLLs',
'D:\\workshop\\Python24\\lib',
'D:\\workshop\\Python24\\lib\\plat-win',
'D:\\workshop\\Python24\\lib\\lib-tk',
'D:\\workshop\\Python24\\Lib\\site-packages\\pythonwin',
'D:\\workshop\\Python24',
'D:\\workshop\\Python24\\lib\\site-packages',
'D:\\workshop\\Python24\\lib\\site-packages\\win32',
'D:\\workshop\\Python24\\lib\\site-packages\\win32\\lib']
l site-packages目錄通常是個(gè)不錯的選擇。
l 另外一種方法是將模塊目錄放到操作系統環(huán)境變量PYTHONPATH中。
l UNIX的例子:
export PYTHONPATH=$PYTHONPATH:~/python
l Windows的例子:
set PYTHONPATH=%PYTHONPATH%;C:\python
2、包(package)
(1)包的結構:
l 模塊保存到.py文件中;
l 包是目錄,但其中必須包含__init__.py的模塊;
l 模塊文件保存在包目錄中;
l 下面是個(gè)例子:
~/python/ 假設目錄加到PYTHONPATH中
~/python/drawing/ 包目錄(drawing包)
~/python/drawing/__init__.py 包目錄下的代碼(drawing模塊)
~/python/drawing/colors.py colors模塊
~/python/drawing/shapes.py shapes模塊
l 下面的導入都是合法的:
import drawing # 導入drawing包,只有__init__模塊有效
import drawing.colors # 導入colors模塊,使用全名drawing.colors訪(fǎng)問(wèn)
from drawing import shapes # 導入shapes模塊,使用短名shapes訪(fǎng)問(wèn)
3、揭示模塊內容
(1)使用dir()函數
l 使用dir()函數揭示模塊內容:
>>> import copy
>>> [name for name in dir(copy) if name[0] != '_']
['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'inspect', 'name', 't']
(2)__all__變量
l __all__變量用來(lái)定義模塊的公共接口
>>> copy.__all__
['Error', 'copy', 'deepcopy']
l 當用下面的導入語(yǔ)句時(shí),__all__變量設定的函數(變量或類(lèi))可以直接引用:
from copy import *
l 而PyStringMap必須顯式導入,才可以直接引用:
from copy import PyStringMap
l 在編寫(xiě)模塊時(shí),設置__all__變量通常是個(gè)有用的技巧
(3)獲得幫助信息
l 使用help()函數獲得幫助信息
>>> help(copy.copy)
Help on function copy in module copy:
copy(x)
Shallow copy operation on arbitrary Python objects.
See the module's __doc__ string for more info.
l 文檔字符串是寫(xiě)在函數(變量或類(lèi))的開(kāi)始部分,用來(lái)文檔化的,保存在__doc__屬性中:
>>> print copy.copy.__doc__
Shallow copy operation on arbitrary Python objects.
See the module's __doc__ string for more info.
(4)查看源代碼
l 使用模塊的__file__屬性,可以獲得模塊源代碼所在的位置
>>> print copy.__file__
D:\workshop\Python24\lib\copy.pyc
l .pyc文件是編譯過(guò)的Python文件,在第一次導入模塊時(shí)創(chuàng )建(和.py文件同一個(gè)目錄);在后續導入時(shí)使用該文件,以提高Python的處理效率