python学习笔记06----模块

简介

如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?答案是使用模块。模块是一个包含了所有你定义的函数和变量以.py结尾的文件。

定义并载入模块

首先来学习如何使用模块。
我在c:\test存放一个文件:Hello.py。存放的代码是:

1
print("Hello")

接着我们执行下面代码

1
2
3
4
import sys                         #import的作用是导入模块,这里我们导入了sys模块
sys.path.append("c:\\test") #这条语句的作用是告诉解释器从哪里寻找模块。 路径还可以这样写sys.path.append("c:/test")

import Hello #这时我们就可以导入自己的模块Hello(模块名为文件名)

输出结果

1
Hello

这是可以在c:/test文件夹下看到多了一个新的文件夹pycache,在这个文件夹中出现了文件Hello.cpython-34.pyc。这个文件是与平台无关,且已经经过编译处理的。

包含函数的模块

我在c:\test存放一个文件:sayHello.py。存放的代码是:

1
2
3
4
5

def say():
print("hello");
def cry()
print("55555555")

我们执行下面的代码:

1
2
3
4
5
6

import sys
sys.path.append("c:\\test") #如果被导入的模块与输入他的程序在同一个目录中,则不需要sys.path.append了
import sayHello

sayHello.say() #导入模块之后可以调用模块中的函数,但是需要以 模块名.函数 的格式sayHello.cry()

得到 hello,另一种方式是直接导入模块里的函数

1
2
3
4
5
6
import sys
sys.path.append("c:\\test")
from sayHello import say ,cry #直接导入模块中具体的函数,缺点是如果想使用模块中的其他函数,需要追加导入

say() #可以直接使用函数
cry()

模块的属性

name属性

  1. 如果模块是被导入name的值为模块名字(文件名)
  2. 如果模块是被直接执行name的值为’main
1
2
3
4
5

def say():
print("hello");
if __name__ == '__main__': #每个Python模块都有它的__name__,如果它是'__main__',则输出“你好”
print("你好")

输出你好

以模块的形式被调用,则什么都不会输出

应用

当我们编写Python库模块的时候,我们往往运行一些测试语句。当这个程序作为库被import的时候,我们并不需要运行这些测试语句。一种解决方法是在import之前,将模块中的测试语句注释掉。而更优美的解决方法,就是使用name

下面是一个简单的库程序TestLib.py。当直接运行TestLib.py时,name为”main“。如果被import的话,name为”TestLib”。

1
2
3
4
5
6
7
8
9
10

def lib_func(a):
return a + 10

def lib_func_another(b):
return b + 20

if __name__ == '__main__':
test = 101
print(lib_func(test))

doc属性

介绍模块的功能

1
2
3

>>> math.__doc__
'This module is always available. It provides access to the\nmathematical functions defined by the C standard.'

模块包

可以将功能相似的模块放在同一个文件夹(比如说this_dir)中,构成一个模块包。通过

1
import this_dir.module     #引入this_dir文件夹中的module模块.

该文件夹中必须包含一个init.py的文件,提醒Python,该文件夹为一个模块包。init.py可以是一个空文件。

Tips

在编译器中可以通过dir()函数来查看模块中的属性和函数。

1
2
3
4

>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']