開始Python -- 模塊(Modules) 收藏
1,、模塊 (1)Python程序可以作為模塊導(dǎo)入
l 將Python程序保存為.py文件到指定目錄,,例如:c:/python/hello.py
# hello.py
print "Hello, world!"
l 告訴Python模塊的位置,,一種方法是將.py文件的保存目錄追加到Python的系統(tǒng)路徑中:
>>> import sys
>>> sys.path.append('c:/python')
l 這樣就可以導(dǎo)入程序了(模塊名即.py文件名):
>>> import hello
Hello, world!
l 如果修改了程序,再次導(dǎo)入,,程序什么也沒有做:
>>> import hello
>>>
l 這是因為模塊主要用來定義變量,、函數(shù)和類,只導(dǎo)入一次,。
l 要重新導(dǎo)入的方法是使用內(nèi)建的reload()函數(shù):
>>> hello = reload(hello)
Hello, world!
(2)模塊用來定義變量,、函數(shù)和類
l 模塊導(dǎo)入后,模塊中定義的變量,、函數(shù)和類可以作為模塊的屬性使用
# hello2.py
def hello():
print "Hello, world!"
>>> import hello2
>>> hello2.hello()
Hello, world!
(3)使你的模塊有效
l 通常不會像前面的方法一樣編輯sys.path,,而是將模塊目錄放到系統(tǒng)默認(rèn)的路徑中:
>>> 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目錄通常是個不錯的選擇。
l 另外一種方法是將模塊目錄放到操作系統(tǒng)環(huán)境變量PYTHONPATH中,。
l UNIX的例子:
export PYTHONPATH=$PYTHONPATH:~/python
l Windows的例子:
set PYTHONPATH=%PYTHONPATH%;C:\python
2,、包(package)
(1)包的結(jié)構(gòu):
l 模塊保存到.py文件中;
l 包是目錄,,但其中必須包含__init__.py的模塊,;
l 模塊文件保存在包目錄中,;
l 下面是個例子:
~/python/ 假設(shè)目錄加到PYTHONPATH中
~/python/drawing/ 包目錄(drawing包)
~/python/drawing/__init__.py 包目錄下的代碼(drawing模塊)
~/python/drawing/colors.py colors模塊
~/python/drawing/shapes.py shapes模塊
l 下面的導(dǎo)入都是合法的:
import drawing # 導(dǎo)入drawing包,,只有__init__模塊有效
import drawing.colors # 導(dǎo)入colors模塊,,使用全名drawing.colors訪問
from drawing import shapes # 導(dǎo)入shapes模塊,使用短名shapes訪問
3,、揭示模塊內(nèi)容
(1)使用dir()函數(shù)
l 使用dir()函數(shù)揭示模塊內(nèi)容:
>>> 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__變量用來定義模塊的公共接口
>>> copy.__all__
['Error', 'copy', 'deepcopy']
l 當(dāng)用下面的導(dǎo)入語句時,,__all__變量設(shè)定的函數(shù)(變量或類)可以直接引用:
from copy import *
l 而PyStringMap必須顯式導(dǎo)入,才可以直接引用:
from copy import PyStringMap
l 在編寫模塊時,,設(shè)置__all__變量通常是個有用的技巧
(3)獲得幫助信息
l 使用help()函數(shù)獲得幫助信息
>>> 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 文檔字符串是寫在函數(shù)(變量或類)的開始部分,,用來文檔化的,保存在__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文件是編譯過的Python文件,,在第一次導(dǎo)入模塊時創(chuàng)建(和.py文件同一個目錄);在后續(xù)導(dǎo)入時使用該文件,,以提高Python的處理效率
本文來自CSDN博客,,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/ruby_beginner/archive/2009/03/02/3949901.aspx
|
|