模块化
一. 模块
概述:
目前代码比较少 写在一个文件中还体现不出什么缺点 但是随找代码越来越多 代码就越来越难以维护
为了解决难以维护的问题
我们把很多相似功能的函数 分组 分别放到不同的文件中
这样每个文件所包含的文件就相对于叫少
大致的功能可以用文件名来体现
一个.py就是一个文件就是一个模块
模块的优点:
为了提高 代码的维护
提高了代码的复用度 可以被多个地方引用
# 一个.py就是一个模块 # 每一模块都有一个__name__属性,当其值等于 "__main__"时 表明该模块自身在执行 # # 否则被引入了其他文件 # 当前文件如果程序的入口文件 则 __name__属性的值为__main__ if __name__=="__main__": print("这是封装的模块") else: def sayGood(): print("my name is veary good") def sayNice(): print("my name is veary good") def sayHandsome(): print("my name is veary good")
实例
这是model文件 # 一个.py就是一个模块 def sayGood(): print("my name is veary good") def sayNice(): print("my name is veary good") def sayHandsome(): print("my name is veary good") t1=1000000000000000 方法一执行引入文件: # # 引用封装的模块 # import 语句 # 格式: import modulel[modulel1,[modulel2.......]] # 方法1 导入整提模块 # 自定义模块 后面不加.py后缀 # 注意 一个模块只会引入一次 不管你执行了 多次 import 防止模块多次引入 import module # 使用模块中的内容: # 格式: 模块名 函数名/变量 module.sayHandsome() # my name is veary good module.sayGood() # my name is veary good module.sayNice() # my name is veary good print(module.t1) # 1000000000000000 # 引用函数模块 # sayHandsome() # sayGood() # sayNice() 方法二执行引入文件: # import module # from.......import语句 # 作用:从模块中导入一个指定的部分到当前命名空间 # 格式: from module import name[,[name2]] # 意思从modul这个模块里导入那个功能模块 from module import sayGood ,sayNice,sayHandsome """ 程序内容的函数可以将模块中的同名函数覆盖 def sayGood(): print("*********************") """ sayGood() # my name is veary good sayNice() # my name is veary good sayHandsome() #my name is veary good 方法三执行引入文件: # from.......import*语句 # 作用:把一个模块中所有的内容导入 当前命名空间 from module import * #最好不要过多使用 """ 程序内容的函数可以将模块中的同名函数覆盖 def sayGood(): print("*********************") """ sayGood() 方法四执行引入文件: import module1 """ __name__属性: 模块就是一个可以执行的.py文件 一个模块被另一程序引入 我们不想让模块中的某些代码执行 可以用__name__属性来使程序仅调用模块中的一部分 """ module1.sayGood() #my name is veary good
# 队列就是先进去的 就先走 相当于排队
# 队列就是先进去的 就先走 相当于排队 # import os import collections # 队列是先进先出 def work (path): resPath=r"E:\Studypython\py2\res" # 打开文件 with open(path,"r")as f: while True: # 754305045@qq.com----8885555 lineInfo=f.readline() if len(lineInfo)<5: break print(lineInfo) mailStr=lineInfo.split("----")[0] # 754305045@qq.com fileType=mailStr.split("@")[1].split(".")[0] dirStr=os.path.join(resPath,fileType) #print(dirStr) # E:\Studypython\py2\res\qq # 判断是否为目录存在 if not os.path.exists(dirStr): # 创建普通文件 os.mkdir(dirStr) filePath=os.path.join(dirStr,fileType+".txt") print(filePath) #E:\Studypython\py2\res\qq\qq.txt with open(filePath,"a")as fw: fw.write(mailStr+"\n") def aa(path): #创建一个队列 queue=collections.deque() # 进队 queue.append(path) while len(queue)!=0: # 出队取数据 dirPath=queue.popleft() # 找出所有文件 filesList=os.listdir(dirPath) for fileName in filesList: # 绝对路径 fileAbsPath=os.path.join(dirPath,fileName) #print(fileAbsPath) # E:\Studypython\py2\dir\.project # E:\Studypython\py2\dir\2 # E:\Studypython\py2\dir\app.js # E:\Studypython\py2\dir\controller # E:\Studypython\py2\dir\models # E:\Studypython\py2\dir\node_modules # E:\Studypython\py2\dir\package.json # E:\Studypython\py2\dir\public # E:\Studypython\py2\dir\uploads # E:\Studypython\py2\dir\views # 判断是否为目录 if os.path.isdir(fileAbsPath): print("目录-----"+fileName) queue.append(fileAbsPath) else: # 处理普通文件 work(fileAbsPath) aa(r"E:\Studypython\py2\dirName")
二.包的概念
# 思考: 如果不同的人编写的模块同名怎么办 # 解决: 为了解决模块命名的冲突 引入了按目录来组织模块的方法 这个模块称为包 # 特点: 引入了包以后 只要顶层的包不与其他人发生冲突 那么模块都不会与别人的发生冲突 # Python中的包 # 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。 # 简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py # 用于标识当前文件夹是一个包。 # 考虑一个在 package_runoob 目录下的 runoob1.py、 # runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下: import a.aa import a.xi import b.aa a.aa.sayGood() # 333333333333333333333333333330000000 a.xi.bb() b.aa.aa() # 111111111111111111111111111111111111111 注意: C:\Users\Administrator\Desktop\1\py2 同一级 往下引入 C:\Users\Administrator\Desktop\1\py2\a : 文件路径 aa.py 文件 xi.py 文件 C:\Users\Administrator\Desktop\1\py2\b : 文件路径 aa.py 文件
三. 第三方模块
# 如何使用第三方模块
# windows 勾选了 pip 和Add python.exe to path
# 在python 3.6以后只带 pip 模块
Python包管理工具 pip
要安装第三方模块 需要知道模块的名字
Pillow 是一个非常强大的处理图像的工具库
pip install Pillow 通过pip 下载
windows 如果报错 则输入 pip install --upgrade pip 这条命令 是表示pip升级
# 如何使用第三方模块 # windows 勾选了 pip 和Add python.exe to path # 在python 3.6以后只带 pip 模块 # Python包管理工具 pip # 要安装第三方模块 需要知道模块的名字 # Pillow 是一个非常强大的处理图像的工具库 # pip install Pillow 通过pip 下载 # windows 如果报错 则输入 pip install --upgrade pip 这条命令 是表示pip升级 # 引入第三方模块 from PIL import Image # 打开图片 im=Image.open("111.png") # 查看图片的信息 print(im.format,im.size,im.mode) #PNG (800, 600) RGBA # 设置图片的大小 im.thumbnail((100,100)) # 保存新图片 im.save("temp.jpg","JPEG")