1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用。模块中的定义可以被导入到其他模块或者main模块。
模块就是一个包含Python定义和语句的文件。文件名就是添加了.py扩展名的模块名。
在当前目录下建立一个包含以下内容的fibo.py文件:
ef fib(n): a,b=0,1 while b<n: print(b,end=' ') a,b=b,a+b print() def fib2(n): result=[] a,b=0,1 while b<n: result.append(b) a,b=b,a+b return result
然后利用import fibo命令导入这个模块,便可直接引入fibo中定义的函数名
>>> import fibo >>> fibo.fib(100) 1 1 2 3 5 8 13 21 34 55 89 >>> fibo.fib2(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] >>> fibo.__name__ 'fibo'
如果频繁使用一个函数,可以赋予一个本地变量:
>>> fib=fibo.fib >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>>
2. 深入Python模块
除了包含函数定义以外,模块也可以包含可执行语句,这些语句一般用来初始化模块,他们仅在第一次被导入的地方执行一次。
每个模块都有自己私有的符号表,被模块内所有的函数定义作为全局符号表使用。
还有一种import语句的变体,可以从一个模块中将名字直接导入到当前模块的符号表中,但是这种方式不会把操作的模块名引入到当前符号表中
>>> from fibo import fib,fib2 >>> fib(400) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>>
更进一步,还有一种导入模块中定义的所有名称的变体(这会导入那些除了以下划线开头的名称):
>>> from fibo import * >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 >>>
注意:在一个解释器会话中每个模块仅被导入一次,所以,如果修改了模块,必须重启解释器-或者如果只是一个想要交互测试的模块,使用import.reload()方法。例如:
>>> import imp >>> imp.reload(modulename)
2.1 模块的搜索路径
当一个名spam的模块被导入时,解释器首先会在当前目录搜索一个名为spam.py的文件,然后是在环境变量PYTHONPATH中定义的目录列表。如果没有定义PYTHONPATH,或者按照里面的路径没有找到文件,解释器会继续在Python默认安装路径中搜索。
实际上,模块都是在变量sys.path定义的目录列表中查找:
>>> import sys >>> sys.path ['', 'C:\Python33\Lib\idlelib', 'C:\Windows\system32\python33.zip', 'C:\Python33\DLLs', 'C:\Python33\lib', 'C:\Python33', 'C:\Python33\lib\site-packages']
在每个Python解释器中,变量sys.ps1和sys.ps2分别定义了主提示符和次提示符使用的字符串(仅在Python命令行有效,在Python IDLE 中无效)
>>> import sys >>> sys.ps1 '>>> ' >>> sys.ps2 '... ' >>> sys.ps1='>:' >:print('Yuck!') Yuck! >: