2021-02-07 Python模块化编程

Python模块化编程

module程序设计理念

在这里插入图片描述
在这里插入图片描述

  1. Python 程序由模块组成,一个模块对应python 源文件,一般后缀名是:.py;
  2. 模块由语句组成,运行Python 程序时,按照模块中语句的顺序依次执行;
  3. 语句是Python 程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等
    模块化编程有如下几个重要优势:
  4. 便于将一个任务分解成多个模块,实现团队协同开发,完成大规模程序
  5. 实现代码复用
  6. 可维护性增强

模块化编程流程

模块化编程的一般流程:

  1. 设计API,进行功能描述;
  2. 编码实现API 中描述的功能;
  3. 在模块中编写测试代码,并消除全局代码;
  4. 使用私有函数实现不被外部客户端调用的模块函数

API和功能描述

可以通过**help(模块名)**查看模块的API,一般使用时先导入模块然后通过help函数查看

import math
help(math)

对于自定义的模块,可以通过**__doc__**可以获得模块的文档字符串的内容

"""
本模块用于计算
"""
def computation(a):
	"""computation"""
	pass
import compute
print(compute.__doc__)
print(compute.computation.__doc__)

模块的创建和测试代码

每个模块都有一个名称,通过特殊变量__name__可以获取模块的名称。在正常情况下,模块名字对应源文件名
仅有一个例外,就是当一个模块被作为程序入口时(主程序、交互式提示符下),它的__name__的值为__main__

# 通过__name==“__main__”独立处理模块的测试代码
"""
本模块用于计算公司员工的薪资
"""
company = "company1"
def yearSalary(monthSalary):
	"""根据传入的月薪,计算出年薪"""
	return monthSalary*12

def daySalary(monthSalary):
	"""根据传入的月薪,计算出每天的薪资"""
	return monthSalary/22.5 #国家规定每个月的平均工作日是22.5

if __name__ =="__main__": #测试代码
	print(yearSalary(3000))
	print(daySalary(3000))

模块的导入

import导入

import 语句的基本语法格式如下:
import 模块名#导入一个模块
import 模块1,模块2… #导入多个模块
import 模块名as 模块别名#导入模块并使用新名字
import 加载的模块分为四个通用类别:

  1. 使用python 编写的代码(.py 文件);
  2. 已被编译为共享库或DLL 的C 或C++扩展;
  3. 包好一组模块的包;
  4. 使用C 编写并链接到python 解释器的内置模块;
    import 本质上是使用了内置函数__import__()
    当我们通过import 导入一个模块时,python 解释器进行执行,最终会生成一个对象,这个module类的对象就代表了被加载的模块

from … import 导入

import 导入的是模块,from…import 导入的是模块中的一个函数/一个类
如果进行类比的话,import 导入的是“文件”,必须前面加“文件名称”;from…import 导入的是文件下的“内容”,前面不需要加“文件名称”

__import__()动态导入

import 语句本质上就是调用内置函数__import__(),可以通过它实现动态导入,给__import__()动态传递不同的的参数值,就能导入不同的模块

s = "math"
m = __import__(s) #导入后生成的模块对象的引用给变量m
print(m.pi)

一般不建议使用__import__()导入,其行为在python2 和python3 中
有差异,会导致意外错误,如果需要动态导入可以使用importlib模块

import importlib
a = importlib.import_module("math")
print(a.pi)

模块的加载

当导入一个模块时, 模块中的代码都会被执行,如果再次导入这个模块,则不会再次执行
一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象
有时候我们确实需要重新加载一个模块,这时候可以使用**importlib.reload()**方法

包package

包的概念和结构

将功能类似的模块放到一起,形成了“包”
本质上,“包”就是一个必须有__init__.py 的文件夹
包下面可以包含模块(module),也可以再包含子包(subpackage)

导入包

导入包的本质其实是“导入了包的__init__.py”文件,在__init__.py 中批量需要的模块

  1. import a.aa.module_AA
    使用时,加完整名称来引用,比如:a.aa.module_AA.fun_AA()
  2. from a.aa import module_AA
    使用时,可以直接使用模块名,比如:module_AA.fun_AA()
  3. from a.aa.module_AA import fun_AA 直接导入函数
    使用时,可以直接使用函数名,比如:fun_AA()
    如果是子包内的引用,可以按相对位置引入子模块
  • from … import module_A #…表示上级目录.表示同级目录
  • from . import module_A2 #.表示同级目录

sys.path 和模块搜索路径

在这里插入图片描述
在这里插入图片描述

模块发布和安装

本地发布和安装

发布
  1. 创建模块文件夹
  2. 在文件夹同一级目录下创建setup.py文件
    在这里插入图片描述
  3. 在终端内进入对应文件夹,执行python setup.py sdist,生成dist文件夹
安装
  1. 在终端内进入对应文件夹,执行python setup.py install
  2. 安装成功后,我们进入python 目录/Lib/site-packages 目录(第三方模块都安装的这里,python 解释器执行时也会搜索这个路径),可以看到对应名称的文件夹
  3. import导入使用

上传到PyPI(略)

库 Library

标准库模块 standard library

用户自定义模块(包含第三方模块)

PyPI(Python Package Index)是python 官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI
PyPI 推荐使用pip 包管理器来下载第三方库,pip 是一个现代的,通用的Python 包管理工具,提供了对Python 包的查找、下载、安装、卸载的功能
安装方式:

  • pip install
  • IDE中直接安装
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值