##模块的定义
模块是包含函数和其他语句的python脚本文件,它以“.py“为后缀名,可以通过倒入模块然后使用模块中提供的函数和数据。
##模块的基本用法
1,导入模块
可以使用以下两种方式导入模块或者模块中的函数。
- import 模块名
- import 模块名 as 新名字
- from 模块名 import 函数名
from 时将模块中的函数或者名字导入,而不是整个模块
使用import和from还有一个不同:要想使用import导入模块中的函数,必须是模块名+"."+函数名
import math
print sqrt(16)
#正确的为
import math
print math.sqrt(16)
使用from导入函数,使用函数时不用加模块名,如果想将模块中的所有函数导入,在from后使用*通配符
在python2中,还可以通过使用内置函数reload重新载入模块
在python3中,reload函数已经被删除,可以使用imp模块中的reload函数。
2,编写一个python模块
在mymodule.py模块中定义一个函数
import mymodule
mymodule.show()
除了在模块中声明函数外,还可以在函数中定义变量,模块中的变量同样也可以在其他脚本文件中使用。
在模块中
def show():
print "I'm a moudle!"
name = 'mymodule.py'
使用新建的脚本文件调用模块的变量
import mymodule
mymodule.show()
print mymodule.name
##Python在哪里查找模块
如果调用的模块和运行的函数在同一个目录下则直接调用,否则如果Pthon解释器首先在当前目录下查找要导入的模块,如果为找到,则Python解释器会从sys模块中path变量指定的目录下查找要导入的模块。
使用sys.path输出Python的模块查找路径
import sys
print sys.path
在脚本中可以向sys.path添加模块查找路径。
import sys
import os
modulepath = os.getcwd() + '\\module'
sys.path.append(modulepath) #添加路径
print sys.path #显示添加的路径
import mymodule
mymodule.show()
print mymodule.name
mymodule.name = 'usemodule.py'
print mymodule.name
##编译模块
虽然Python时脚本语言,但是可以将脚本翻译成字节码的形式,对于模块总是在第一次调用完后将其编译成字节的形式,以提高脚本的运行速度。
如果想要编译非模块的的脚本,使用complile模块。
import py_compile
py_compile.compile('mymodule.py','mymodule.pyc')
在Python3中如果不指定第二个参数,则将在当前目录新建一个名为“pycache“的目录,并在这个目录生成“被编译模块.cptthon-32。pyc“的pytc字节码文件。
另外还可以通过Python的命令行选项将脚本优化编译。
python -O compile.py #优化不多,编译后脚本以“.pyo“为扩展名。凡是以他为扩展名的热字节码都是经过优化的
python -OO compile.py #脚本优化程度较大,可是使编译的脚本更小。
##模块也可以独立运行
利用属性name判断脚本的运行状态
def show():
print "I'm a moudle!"
if __name__ == '__main__':
show()
##如何查看模块提供的函数名
dir (【object】)
如果不传参数,那末将返回当前脚本的所有名字列表。
a = [1,2,3,4]
b = 'python'
def fun():
print 'Python'
print dir()
##用包来管理多个模块
包可以看作处于同一目录中的模块。在包的每个目录中必须包含一个名为
init.py的文件,是一个空文件,仅用于表示该目录是一个包。
如果A是一个包,导入模块的时候可以使用import和from
from A.B inmport a #导入A包的B模块的a函数
import A.B.a
包也可以内部引用