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 如果修改了程式,再次導入,程式什麼也沒有做:
>>> import hello
>>>
l 這是因為子產品主要用來定義變量、函數和類,隻導入一次。
l 要重新導入的方法是使用内建的reload()函數:
>>> hello = reload(hello)
Hello, world!
(2)子產品用來定義變量、函數和類
l 子產品導入後,子產品中定義的變量、函數和類可以作為子產品的屬性使用
# hello2.py
def hello():
print "Hello, world!"
>>> import hello2
>>> hello2.hello()
Hello, world!
(3)使你的子產品有效
l 通常不會像前面的方法一樣編輯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目錄通常是個不錯的選擇。
l 另外一種方法是将子產品目錄放到作業系統環境變量PYTHONPATH中。
l UNIX的例子:
export PYTHONPATH=$PYTHONPATH:~/python
l Windows的例子:
set PYTHONPATH=%PYTHONPATH%;C:/python
2、包(package)
(1)包的結構:
l 子產品儲存到.py檔案中;
l 包是目錄,但其中必須包含__init__.py的子產品;
l 子產品檔案儲存在包目錄中;
l 下面是個例子:
~/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通路
from drawing import shapes # 導入shapes子產品,使用短名shapes通路
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__變量用來定義子產品的公共接口
>>> copy.__all__
['Error', 'copy', 'deepcopy']
l 當用下面的導入語句時,__all__變量設定的函數(變量或類)可以直接引用:
from copy import *
l 而PyStringMap必須顯式導入,才可以直接引用:
from copy import PyStringMap
l 在編寫子產品時,設定__all__變量通常是個有用的技巧
(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 文檔字元串是寫在函數(變量或類)的開始部分,用來文檔化的,儲存在__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檔案,在第一次導入子產品時建立(和.py檔案同一個目錄);在後續導入時使用該檔案,以提高Python的處理效率