python怎么写模块

1.python中怎么import自己写的模块昨天面试空管局的时候遇到了这个问题 。当时回答的不是很理想 。现在整理一下 。
Python学习手册中写道:
定义模块 , 只要使用文本编辑器 , 把一些python代码输入到文本中 , 然后以.py为后缀名进行保存 , 任何此类文件都会被认为是python模块 。
比如说 , 下面的代码输入到一个文件中 , 就可以看作是一个模块:
[python] view plain copy
def printme(var):
print var
if __name__ == '__main__':
printme(1)
假设说输入到a.py中 , 那么import a就可以把这个模块导入 。
然后可执行a.printme(3) , 屏幕即可打印出3 。
----------------------------------------------------------------------------
一个模块顶层定义的变量 , 会自动变成模块的属性 。例如:
[python] view plain copy
data=http://www.xuexi88.com/zhishi/[1,2,3]
def printme(var):
print var
if __name__ == '__main__':
printme(1)
data变量就是模块的一个属性 。其实printme也是一个属性 , 只不过是一个函数罢了 。
reload函数可以重新加载一个模块 。如果在模块代码中更改了 , 那么需要重新加载 。
上面a.data , 就是访问模块中的属性 。
--------------------------------
上面的例子是导入一个文件作为一个模块 。
其实python的模块导入还有更丰富的内容 。
除了模块名之外 , python也可以导入指定目录路径 。python代码的目录就称为包 。因此 , 这类导入就称为包导入 。事实上 , 包导入是把计算机上的目录变成python的一个命名空间 。而属性就是目录中包含的子目录或者是模块文件 。
看下面例子:
在我的桌面上有一个aa文件夹 , 里面有bb文件夹 , bb里面有a.py这个文件 。
那么在aa和bb文件夹中分别放置一个__init__.py , 之后 , 在命令行中import aa.bb.a , 就可以导入模块a了 。
2.python中怎么import自己写的模块(1)主程序与模块程序在同一目录下:
如下面程序结构:
1
2
3
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1 ,  则直接使用import mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
1
2
3
4
5
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2 ,  需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
1
2
3
4
5
6
7
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2 。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件 。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行 , 如test2.py是在cd sub;之后执行python test2.py
而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功 。
1
2
3
4
import sys
sys.path.append("..")
import mod1
import mod2.mod2
(4)从(3)可以看出 , 导入模块关键是能够根据sys.path环境变量的值 , 找到具体模块的路径 。这里仅介绍上面三种简单情况 。