Python学习 Part4:模块

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!
>:

 

 

posted on 2013-10-21 15:23  LilianChen  阅读(455)  评论(0编辑  收藏  举报

导航