模块化

一. 模块
概述:

目前代码比较少 写在一个文件中还体现不出什么缺点 但是随找代码越来越多 代码就越来越难以维护

为了解决难以维护的问题

我们把很多相似功能的函数 分组 分别放到不同的文件中

这样每个文件所包含的文件就相对于叫少

大致的功能可以用文件名来体现

一个.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")

 

posted @ 2018-12-24 15:42  Loversuperme  阅读(132)  评论(0编辑  收藏  举报