简介
如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?答案是使用模块。模块是一个包含了所有你定义的函数和变量以.py结尾的文件。
定义并载入模块
首先来学习如何使用模块。
我在c:\test存放一个文件:Hello.py。存放的代码是:
print("hello");
接着我们执行下面代码
import sys #import的作用是导入模块,这里我们导入了sys模块
sys.path.append("c:\\test") #这条语句的作用是告诉解释器从哪里寻找模块。 路径还可以这样写sys.path.append("c:/test")
import Hello #这时我们就可以导入自己的模块Hello(模块名为文件名)
输出结果
hello #值得注意的是,只有第一次导入模块会之行模块中的命令
这是可以在c:/test文件夹下看到多了一个新的文件夹__pycache__,在这个文件夹中出现了文件Hello.cpython-34.pyc。这个文件是与平台无关,且已经经过编译处理的。
包含函数的模块
我在c:\test存放一个文件:sayHello.py。存放的代码是:
def say():
print("hello");
def cry()
print("55555555")
接着我们执行下面代码
import sys
sys.path.append("c:\\test") #如果被导入的模块与输入他的程序在同一个目录中,则不需要sys.path.append了
import sayHello
sayHello.say() #导入模块之后可以调用模块中的函数,但是需要以 模块名.函数 的格式sayHello.cry()
与上面代码结果相同
import sys
sys.path.append("c:\\test")
from sayHello import say ,cry #直接导入模块中具体的函数,缺点是如果想使用模块中的其他函数,需要追加导入
say() #可以直接使用函数
cry()
输出结果
hello
模块的属性
__name__属性
1. 如果模块是
被导入,__name__的值为模块名字(文件名)
2. 如果模块是 被直接执行,__name__的值为’__main__’
2. 如果模块是 被直接执行,__name__的值为’__main__’
def say():
print("hello");
if __name__ == '__main__': #每个Python模块都有它的__name__,如果它是'__main__',则输出“你好”
print("你好")
输出结果
你好
以模块的形式被调用,则什么都不会输出
应用
当我们编写Python库模块的时候,我们往往运行一些测试语句。当这个程序作为库被import的时候,我们并不需要运行这些测试语句。一种解决方法是在import之前,将模块中的测试语句注释掉。而更优美的解决方法,就是使用__name__。
下面是一个简单的库程序TestLib.py。当直接运行TestLib.py时,__name__为"__main__"。如果被import的话,__name__为"TestLib"。
下面是一个简单的库程序TestLib.py。当直接运行TestLib.py时,__name__为"__main__"。如果被import的话,__name__为"TestLib"。
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__属性
介绍模块的功能
>>> math.__doc__
'This module is always available. It provides access to the\nmathematical functions defined by the C standard.'
模块包
可以将功能相似的模块放在同一个文件夹(比如说this_dir)中,构成一个模块包。通过
import this_dir.module
引入this_dir文件夹中的module模块。
该文件夹中必须包含一个__init__.py的文件,提醒Python,该文件夹为一个模块包。__init__.py可以是一个空文件。
小提示:
1.在编译器中可以通过dir()函数来查看模块中的属性和函数。
>>> 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']
上一讲:
Python菜鸟学习手册06----函数
欢迎收听我的微信公众号