PYTHON 基础-DAY11 20210412

模块化程序设计理念

模块和包概念的

  • 语句—函数和变量—类和对象—模块—包
  • python程序由模块组成,一个模块对应一个python文件,一般后缀名为.py
  • 语句是python程序的构造单元,用于创建对象、变量赋值】调用函数、控制语句

标准库模块standard library

  • 函数库分为标准库和用户自定库,第三方库也是用户自定义库
  • 标准库提供了操作系统功能、网络通信、文本处理、文件处理、数学运算等基本功呢个,比如random随机数、math数学运算、time时间处理、file文件处理、os操作系统交互、sys解释器交互
  • 第三方模块功能覆盖:科学计算、WEB开发、大数据、人工智能、图形系统

模块化编程

  • 模块化编程module programming的优点:
    -将一个任务分解成多个模块,实现团队协同开发,实现大规模程序;
    -实现代码复用
    -可维护性增强
  • 模块化编程的一般流程:
    -设计API,进行功能描述;
    -编程实现API中描述的功能;
    -在模块中编写测试代码,并消除全局变量;
    -使用私有函数实现不被外部客户端调用的模块函数;

模块的API和功能描述要点

  • API(application programming interface,应用程序编码接口)用于描述模块中提供的函数和类的功能描述和使用方式描述
  • 模块化编程中,首先设计的是模块的API(即实现的功能描述),然后开始编码实现API中描述的功能,最后在其他模块中导入该模块的进行调用
  • 可通过help(模块名)查看模块的API,一般先导入模块,然后再使用help()查看。
  • 可通过__doc__获得模块的文档字符串的内容

模块的创建和测试代码

  • name:获取模块的名字,正常情况下,模块的名字对应源文件名,除当一个模块被作为程序入口时(主程序、交互式提示符下)的情况下,name__的值为__main。因此根据这个特点,将模块源代码文件中的测试代码进行独立处理

模块文档字符串和API设计

  • 模块的第一行增加一个文档字符串,用于描述模块的相关功能,然后通过__doc__获得文档字符串的内容

模块的导入

import语句导入

  • import语句的基本语法:
    import 模块名 #导入一个模块
    import 模块1,模块2 #导入多个模块
    import 模块名 as 模块别名 #导入模块并使用新名字
  • import加载的模块氛围四个通用类别:
    使用python编写的代码(.py文件)
    已被编译为共享库或DDL的C或C++扩展
    包好的一组模块的包
    使用C编写并连接到python解释器的内置模块
  • 通过import导入模块,实际是使用了内置函数__import__()。通过import导入一个模块时,python解释器会执行,最终会生成一个对象,这个对象代表了被加载的模块。

from…import导入

  • from…import导入模块中成员,基本语法:
    from 模块名 import 成员1,成员2
  • 若希望导入一个模块中的所有成员,可以采用:
    from 模块名 import *
  • 避免使用from 模块名 import *。其中表示导入模块中所有的不是以下划线_开头的名字都导入当前位置,因此可能覆盖掉已经定义的名字,可读性较差

from…import 和import的区别

  • import导入的是模块,from…import 导入的是模块中的一个函数\类
  • import导入的是文件,若使用文件下的内容,必须在前面加文件名称。from…import导入文件下的内容,可以直接使用内容,不需要添加文件名称

import()动态导入

  • import语句本质是调用内置函数__import__(),可以通过它实现动态导入,给__import__()动态传递不同的参数值,就能导入 不同的模块。
  • 不建议使用 import()动态导入,如果需要动态导入可以使用importlib模版
a="math"
m=__import__(a)
print(m.pi)
import importlib
a=importlib.import_module("math")
print(a.pi)

模块的加载问题

  • 当导入一个模块时,模块中的代码都会被执行;如果再次导入这个模版,则不会再次执行。因为导入模块更多时候需要定义模块中的变量、函数、对象等,这些并不需要反复执行。只导入一次import-only-once成为一种执行
  • !!模块无论导入多少次,这个模版在整个解释器进程内有且仅有一个实例对象
  • 可以通过import importlib importlib.import.reload()重新导入模版

包package的使用

包的概念和结构

  • 当一个项目存在很多模版,需要进行组织。我们将功能类似的模版放在一起,形成包。本质上,包必须有一个__init__.py的文件夹。包可以包含模版以及子包subpackage

导入包操作和本质

1)import a.aa.moudle_AA:在使用时必须加完整名称来引用,比如import a.aa.moudle_AA.fun_AA()
2)from a.aa import moudle_AA:在使用时可以直接使用模块名,如moudle_AA.fun_AA()
3)from a.aa.moudle_AA import fun_AA():可直接使用函数名
from package import item:item可以是包、模块、函数等
import item1.item2:item必须是包或模块

  • 每个包下面有__init__.py文件,三个核心作用主要是:
    1)作为包的标识,不能删除
    2)用来实现模糊导入
    3)导入包实质上是执行__init__.py文件,可在__init__.py文件中做包的初始化以及需要统一执行代码。
  • 可以在__init__.py中批量导入我们需要的模版,不需要一个个导入

用*导入包

  • import *理论时上希望文件系统找出包内所有子模块,然后导入,python为解决该问题提供的方案是提供一个包索引。
  • 索引是由__init__.py定义__all__变量,该变量为一列表,如__all__=[“module_A”,“module_B”]

包内引用

  • 如果是子包的引用,可以按相对位置引入子模版
    from . import module_A # . 表示同级目录
    from … import module_A # … 表示上级目录

sys.path和模块搜索路径

  • python解释器一般按照以下的路径寻找模块文件(按照顺序寻找,找到即停不继续往下寻找):
    内置模块、
    当前目录、
    程序的主目录、
    pythonpath目录、
    标准链接库目录、
    第三方库目录、
    .pth文件的内容<可在site-packages目录下添加.pth文件,一行一个目录>
    sys.path.append()临时添加的目录

模块发布和安装

模块的本地发布

1)为模块文件创建如下结构的文件(文件夹与模块名一致)
2)在文件夹中创建一个名为【setup.py】的文件,内容如下:

from distutils.core import setup

setup(
	name="aaaa" #对外我们模块的名字
	version="1.0" #版本号
	description="abcd" #描述
	author=“a” #作者
	author_mail=“” 
	py_modules=["module1","module2"] #要发布的模版
)

3)构造一个发布文件,通过终端,cd到模版文件下面,再键入命令python setup.py sdist

本地安装

  • 将发布安装到您的本地计算机上,仍在cmd命令行模式下操作,进setup.py所在的目录键入命令:python setup.py installl
  • 安装成功后,进入python目录/Lib/site-packages目录(第三方模块都安装在这里,python解释器执行时也会搜索这个路径)。安装成功后,直接使用import导入即可。

上传模块到PyPI

  • 注册PyPI网站
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值