一、什么是模块?
1.1 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。
每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以由两个语句和一个重要的内置函数进行处理。
- import: 使客户端(导入者)以一个整体获取一个模块。
- from:容许客户端从一个模块文件中获取特定的变量名。
- reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。
在一个模块文件的顶层定义的所有变量名都成为了被导入的模块对象的属性。
1.2 模块至少有三个角色:
- 代码重用:模块还是定义变量名的空间,被认作是属性。可以被多个外部的客户端应用;
- 系统命名空间的划分;
- 现实共享服务和数据;
二、python程序架构
2.1
一个ptyhon程序包括了多个含有Python语句的文件。程序是作为一个主体的,顶层的文件来构造的,配合有零个或多个支持文件,在Python中这些文件称作模块。
标准模块:python自带了200多个使用的模块、成为标准连接库
2.2 import如何工作?
2.2 import如何工作?
执行三个步骤:
1)、找到模块文件
2)、编译成位码(需要时)
3)、执行模块的代码来创建其所定义的对象。
在之后导入相同的模块时候,会跳过这三个步骤,而只提取内存中已加载模块对象。
2.3
搜索模块
导入模块时,不带模块的后缀名,比如.py
Python搜索模块的路径:
Python搜索模块的路径:
1)、程序的主目录
2)、PTYHONPATH目录(如果已经进行了设置)
3)、标准连接库目录(一般在/usr/local/lib/python2.X/)
4)、任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去
.pth后缀的文本文件中一行一行的地列出目录。
这四个组建组合起来就变成了sys.path了,
>>> import sys
>>> sys.path
导入时,Python会自动由左到右搜索这个列表中每个目录。
第1,第3元素是自动定义的,第2,第4可以用于扩展路径,从而包括自己的源码目录。
import b的形式可能加载
有些是可调用的对象。例如,函数。
这四个组建组合起来就变成了sys.path了,
>>> import sys
>>> sys.path
导入时,Python会自动由左到右搜索这个列表中每个目录。
第1,第3元素是自动定义的,第2,第4可以用于扩展路径,从而包括自己的源码目录。
import b的形式可能加载
- 源码文件b.py
- 字节码文件.pyc
- 目录b
- 编译扩展模块,比如linux的b.so
- 用C编写的编译好的内置模块,并通过静态连接至Python
- ZIP文件组件,导入时自动解压压缩。
- java类型,在Jython版本的python中。
- .NET组件,在IronPython版本中的Python中
有些是可调用的对象。例如,函数。
第三方工具:distutils
第三方扩展,通常使用标准连接库中的distutils工具来自动安装。使用distutils的系统一般附带setup.py脚本
命令空间是一种独立完备的变量包,而变量就是命名空间对象的属性。模块的命令空间包含了代码在模块文件顶层赋值的所有变量名(也就是没有嵌套与def和class语句中)
第三方扩展,通常使用标准连接库中的distutils工具来自动安装。使用distutils的系统一般附带setup.py脚本
命令空间是一种独立完备的变量包,而变量就是命名空间对象的属性。模块的命令空间包含了代码在模块文件顶层赋值的所有变量名(也就是没有嵌套与def和class语句中)
三、模块代码编写基础
例一:
模块的创建和导入。
创建模块
后缀.py文本文件,模块顶层指定的所有变量名都会变成其属性。
后缀.py文本文件,模块顶层指定的所有变量名都会变成其属性。
示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Filename: support.py
def print_func( par ):
print "Hello : ", par
return
3.1.2 导入模块
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Filename: support.py
# 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func("Praifire")
输出结果:
Hello : Praifire
不过在编译过后会生成pyc后缀文件 上例:support.pyc
注解pyc文件: pyc 是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python 的虚 拟机来执行的。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同。
例二:模块的创建和导入。
3.1 模块的创建
定义一个module.py模块
name='Praifire'
age=22
def printer(x):
print x
使用模块
import全部导入
>>> import module
属性
>>> module.name
'Praifire'
函数
>>> module.printer('Hello')
Hello
import全部导入
>>> import module
属性
>>> module.name
'Praifire'
函数
>>> module.printer('Hello')
Hello