Python语言里模块就是一个程序,只不过它相较于函数,是更高级的封装
- 在这里,我们知道容器是对各种数据类型的封装
- 函数是对Python语句的封装
- 类是对方法与属性的封装(对函数和数据的封装)
- 那么模块就是对上述各种封装组成程序的再封装
模块的作用:
-
封装的Python代码,当代码量很大时,我们最好把它写成不同的模块进行封装,这样可以使函数更加易懂
-
模块封装完以后,可以像函数那样实现对代码的复用
-
在模块封装完毕后,还需要对其导入,即:
import *
然而导入必须符合一定的规则:
- 封装的模块必须和调用该程序的代码在同一目录下,不能在子目录或者上级目录,这样都不能导入
- 搜索路径的方式,Python模块的导入需要一个路径搜素的过程
- 导入一个模块时,Python会在预定好的搜索路径里寻找对应的模块,有则成功导入,没有则会导入失败
>>> import Request
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import Request
ModuleNotFoundError: No module named 'Request'
- Python提供了路径函数,可以向路径的列表里添加一个路径
>>> import Hello
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
import Hello
ModuleNotFoundError: No module named 'Hello' #没有在搜索路径内,无法找到
>>> import sys
>>> sys.path
['', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\idlelib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages']
>>> sys.path.append("D:\\Python_Module") #向搜索路径的列表里添加后,系统后进行搜索
>>> import Hello
>>> Hello.hello() #在调用模块里的函数时,需要带上命名空间,即模块名
Hello World
- 可见常见的搜索路径名称为
["...Python37\\Lib\\idlelib" , "...\\python37.zip","...\\Python37\\DLLs","...\\Python37\\lib","...\\Python37","...\\Python37\\lib\\site-packages(设置存放模块的文件夹)"] **3.包(package)**
- 在大型的程序中,会有很多Python的模块,Python为了按类把这些模块分开,引入了包的概念
- 包,把不同类型的模块存放到不同的文件夹下,然后再把文件的位置告诉Python,导入
(包名). (模块名). (方法名)
,就可以进行调用。 使用包一般包括以下几个步骤:
- 创建,创建一个文件夹(目录),用于存放相关的模块,文件夹的名字即是包的名字
- 在文件夹里创建一个__ init__.py的文件内容可以为空,他的作用是告诉Python将其当做包来进行处理
- 将相关的模块放入该文件夹下
然后自动生成__ pycahe__的文件夹:
就完成了包的创建于导入的准备
关于导入模块
- import (module) 导入一个模块
- 还可以 import (module) as New_name
- 模块的多重导入:from (module) import * 或者 多个方法名
- 模块测试时用到的语句
if __ name__ == __ main __
语句 - 在一个程序被当做模块导入时,模块里的
__ name __
返回值是模块名的字符串的形式 - 不当作模块导入,则返回值为 "__ mian __”字符串
#模块
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fah):
cel = (fah - 32) / 1.8
return cel
def test():
print("32摄氏度对应的华氏度为%d" %c2f(32))
print("99华氏度对应的摄氏度为%d" %f2c(99))
if __name__ == "__main__":
test()
print(__name__ == "__main__") #当作模块导入时返回为False
print(__name__)
当模块当做程序运行时:
32摄氏度对应的华氏度为89 #可见其执行了test()函数
99华氏度对应的摄氏度为37
True
__main__ #当做一般程序运行时,__name__返回值为"__main__”
当模块被导入时
#调用模块的程序
import Module1.TempConver as tc
print(tc.__name__)
print("37摄氏度对应的华氏度为%d" %tc.c2f(37))
print("37华氏度对应的摄氏度为%d" %tc.f2c(37))
#运行的结果为:
>>>False
Module1.TempConver 可见首先运行了模块,再运行调用程序的代码,其中test()语句并没有被调用
#================================调用程序的代码
Module1.TempConver
37摄氏度对应的华氏度为98
37华氏度对应的摄氏度为2
总结
因此在写大型的Python程序时我们最好以模块的形式把程序进行封装
- 用
if __ name __ == "__main __"
进行测试 - 以包(package)的形式把不同类型的模块进行封装,再设置导入
- 可以使得程序更加简洁、漂亮、易读、易懂。