模块化,指的是将一个完整的程序分解为一个一个小的模块,通过将模块组合来搭建出一个完整的程序。
不采用模块化,统一将所有的代码编写到一个文件中。
采用模块化,将程序分别编写到多个文件中。
模块化的优点,1.方便开发2.方便维护3.模块可以复用
在python中一个py文件就是一个模块,要想创建模块,实际上就是创建一个python文件。
注意:模块名要符合标识符的规范
在一个模块中引入外部模块
①import 模块名 (模块名就是python文件的名字,注意不要py)
-可以引入同一个模块多次,但是模块的实例只会创建一个。
import test_module #引入模块
②import 模块名 as 模块的别名
import test_module as test #引入模块
print(test)
-import可以在程序的任意位置调用,但是一般情况下,import语句都会统一写在程序的开头
-每一个模块内部都有一个__name__属性,通过这个属性可以获取到模块的名字
-__name__属性值为__main__的模块是主模块,一个程序中只会有一个主模块
主模块就是我们直接通过python执行的模块。直接执行谁,谁就是主模块。
主模块:
import test_module as test #引入模块
#访问模块中的变量:模块名.变量名
#print(test.a,test.b)
#test.t1()
p=test.Person()
#print(p)
#也可以引入模块中的部分内容
#语法 from 模块名 import 变量,变量....
#from test_module import Person,t1
#from test_module import t1
def t2():
print('这是主模块中的t2')
#from test_module import *#引入模块中所有内容,一般不会使用,因为他会覆盖掉主模块中同名的内容
#也可以为引入的变量使用别名
#from 模块名 import 变量 as 别名
from test_module import t2 as new_t2
#p1=Person()
#print(p1)
#t1()
#t2()
#new_t2()
from test_module import *
#print(_c)这时就无法访问_c
被导入的模块:
#print('我是test_module模块')
#在模块中定义的变量,在引入模块后就可以直接使用了
a=10
b=20
_c=30#希望c是个私有属性,添加了_的变量只能在模块内部访问,外部不能访问.在通过import*引入时,不会引入_开头的变量
#同样可以在模块中定义函数,可以通过模块访问到
def t1():
print('t1')
def t2():
print('t2')
#也可以定义类
class Person():
def __init__(self):
self.name='孙悟空'
#编写测试代码,这部分代码只要当当前文件,
# 作为主模块的时候才需要执行,当模块被其他模块引入时,不需要执行的,此时必须要检查当前模块是否是主模块
if __name__=='__main__':
t1()
t2()
p=Person()
print(p.name)
包也是一个模块,只不过是一个复杂的模块
当我们模块中代码过多时或者一个模块需要被分解为多个模块时,这时就需要使用到包。普通的模块就是一个py文件,而包是一个文件夹。
#包中必须要有一个__init__.py这个文件,这个文件中可以包含有包中的主要内容
import hello#导入包
print(hello.a)
print(hello.b)
hello.test()
#引入包中的其它模块,其他文件
from hello import t1,t2
print(t1.c)
print(t2.d)
#__pycache__是模块的缓存文件
#py代码在执行前需要被解析器转换为机器码,然后再执行。
# 所以我们在使用模块(包)时,需要将模块的代码先转换为机器码再交由计算机执行。
# 而为了提高程序的运行性能,python位在变异过一次以后将代码保存到一个缓存文件中。
# 这样再下次下载这个模块包时,就可以不再重新编译而是直接加载缓存中编译好的代码即可
为了实现开箱即用的思想,python中为我们提供了一个模块的标准库。在这个标准库中有很多很强大的模块,我们可以直接使用。并且标准库会随着python的安装一同安装。
sys模块,它里面提供了一些变量和函数,使我们可以获取到python解析器的信息。或者通过函数来操作python解析器。
os模块让我们可以对操作系统进行访问
import sys
#print(sys)
import pprint
#sys.argv 获取执行代码时,命令行中所包含的参数
print(sys.argv)#返回的是一个列表[],列表中保存了当前命令的所有参数
#sys.modules获取当前程序中引入的所有模块
#pprint.pprint(sys.modules)#返回的是一个字典,字典的key是模块的名字,字典的value是模块对象本身
#pprint模块给我们提供了一个方法pprint()该方法可以用来对打印的数据做简单的格式化
#sys.path是一个列表,列表中保存的是模块的搜索路径
#pprint.pprint(sys.path)
#sys.platform表示当前python运行的平台,windows,linux,macos....
print(sys.platform) #win32
#sys.exit()函数用来退出程序
#sys.exit('程序出现异常结束')
#print('hihihi')
import os
#os.environ 通过这个属性可以获取到系统的环境变量
#pprint.pprint(os.environ['path'])
#os.system()用来执行操作系统的名字
#os.system('dir')
os.system('notepad')