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的处理效率