módulo Capítulo 7

A modulares (módulo) conceptos de programación

1, el módulo de biblioteca estándar (biblioteca estándar)

	与函数类似,模块也分为标准库模块和用户自定义模块。 
	Python 标准库提供了操作系统功能、网络通信、文本处理、文件处理、数学运算等基本的功能。
比如:random(随机数)、math(数学运算)、time(时间处理)、file(文件处理)、 os(和操作系统交互)、
sys(和解释器交互)等。 另外,Python 还提供了海量的第三方模块,使用方式和标准库类似。功能
覆盖了我们 能想象到的所有领域,比如:科学计算、WEB 开发、大数据、人工智能、图形系统等。

2. ¿Por qué la programación modular

	模块(module)对应于Python 源代码文件(.py 文件)。模块中可以定义变量、函数、 类、普通语句。
这样,我们可以将一个 Python 程序分解成多个模块,便于后期的重复应用。模块化编程(Modular 
Programming)将一个任务分解成多个模块。每个模块就像一个积木一样,便于后期的反复使用、
反复搭建。

Programación modular tiene las siguientes ventajas clave:

1. 便于将一个任务分解成多个模块,实现团队协同开发,完成大规模程序 
2. 实现代码复用。一个模块实现后,可以被反复调用。 
3. 可维护性增强。

3, el proceso de programación modular

Programación modular proceso general:

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

4, el módulo API y función que describe la esencia

	API(Application Programming Interface 应用程序编程接口)是用于描述模块中提供的函数和类的
功能描述和使用方式描述。 
	模块化编程中,首先设计的就是模块的 API(即要实现的功能描述),然后开始编码实现 API 中
描述的功能。最后,在其他模块中导入本模块进行调用。 
	我们可以通过help(模块名)查看模块的API。一般使用时先导入模块 然后通过help函数查看。
	
**例如:**
	导入 math 模块,并通过 help()查看 math 模块的 API:
			import math 
			help(math)
	
	也可以在 python 的 api 文档中查询。首先进入 python 的安装目录下的 docs 子目录:双击打开
chm文档,即可通过索引输入“math”查询到对应的 API 内容。

Código de la muestra (API diseño del módulo de cálculo del salario):

# 该模块脚本salary.py 在包目录:CSDNPythonLearn.moudlar下
"""
本模块的作用:计算员工的薪水
"""

company = '阿里巴巴'


def year_salary(month_salary):
    """根据月薪,计算出年薪"""
    pass


def day_salary(month_salary):
    """根据月薪,计算日薪"""
    pass
# 另外一个test.py导入salary模块
import CSDNPythonLearn.moudlar.salary as salary

print(salary.__doc__)
print(salary.year_salary.__doc__)
====================运行结果=============================
本模块的作用:计算员工的薪水

根据月薪,计算出年薪
====================运行结果=============================

5, el módulo para crear y código de prueba

	每个模块都有一个名称,通过特殊变量__name__可以获取模块的名称。在正常情况下,模块名字
对应源文件名。 仅有一个例外,就是当一个模块被作为程序入口时(主程序、交互式提示符下),
它的__name__的值为“__main__”。我们可以根据这个特 点,将模块源代码文件中的测试代码进行
独立的处理。例如: 
				import math 
				math.__name__    #输出'math'

"== por __name__ principales " módulos de procesamiento de muestras de código independientes:

"""
本模块的作用:计算员工的薪水
"""

company = '阿里巴巴'


def year_salary(month_salary):
    """根据月薪,计算出年薪"""
    return month_salary * 12


def day_salary(month_salary):
    """根据月薪,计算日薪"""
    return month_salary / 30


month_salary = 10000
print('年薪:{0}'.format(year_salary(month_salary)))
print('日薪:{0}'.format(day_salary(month_salary)))
====================运行结果=============================
年薪:120000
日薪:333.3333333333333
====================运行结果=============================

En segundo lugar, el módulo de importación

	模块化设计的好处之一就是“代码复用性高”。写好的模块可以被反复调用,重复使用。 模块的导入
就是“在本模块中使用其他模块”。

1, las importaciones instrucción de importación

La declaración básica de importación sintaxis es la siguiente:

	import 模块名 							#导入一个模块 
	import 模块 1,模块 2… 		#导入多个模块 
	import 模块名 as 模块别名 		#导入模块并使用新名字 

módulo de carga tanto de importación se divide en cuatro categorías generales:

	a.使用 python 编写的代码(.py 文件); 
	b.已被编译为共享库或 DLL 的 C 或 C++扩展; 
	c.包好一组模块的包 
	d.使用 C 编写并链接到 python 解释器的内置模块;

	我们一般通过 import 语句实现模块的导入和使用,import本质上是使用了内置函数__import__()。 
当我们通过 import 导入一个模块时,python 解释器进行执行,最终会生成一个对象, 这个对象就代
表了被加载的模块。

Código de ejemplo:

import math

print('id:', id(math))
print('type:', type(math))
print('圆周率:', math.pi)  # 通过math.成员名来访问模块中的成员
====================运行结果=============================
id: 3057842767496
type: <class 'module'>
圆周率: 3.141592653589793
====================运行结果=============================
# 由上,我们可以看到math模块被加载后,实际会生成一个module类的对象,该对象被math变量引用。
# 我们可以通过math变量引用模块中所有的内容。 
# 我们通过import导入多个模块,本质上也是生成多个module类的对象而已。 有时候,我们也需要给
# 模块起个别名,本质上,这个别名仅仅是新创建一个变量引用加载的模块对象而已。
# 例如:import math as m
# 调用的时候就可以使用m对象,此时的效果和math效果一样!!!

2, a partir ... importación de importación

Python 中可以使用 from…import 导入模块中的成员。基本语法格式如下: 
		from 模块名 import 成员 1,成员 2,…
如果希望导入一个模块中的所有成员,则可以采用如下方式: 
		from 模块名 import *

nota:

	尽量避免“from 模块名 import *”这种写法。* 它表示导入模块中所有的不是以下划线(_)开头的
名字都导入到当前位置。 但你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名
字。而且可读性极其的差。一般生产环境中尽量避免使用。

3, las declaraciones de importación y de ... diferencia instrucción de importación

	import 导入的是模块。from...import 导入的是模块中的一个函数/一个类。
	
	如果进行类比的话,import 导入的是“文件”,我们要使用该“文件”下的内容,必须前面
加“文件名称”。from...import 导入的是文件下的“内容”,我们直接使用这 些“内容”即可,
前面再也不需要加“文件名称”了。

. 4, de importación () introduce en el dinámico

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

Código de ejemplo:

# 使用__import__()动态导入指定的模块
s = "math" 
m = __import__(s)   # 导入后生成的模块对象的引用给变量m 
print(m.pi)
====================运行结果=============================
3.141592653589793
====================运行结果=============================
# 注意:一般不建议我们自行使用__import__()导入,其行为在python2和python3中有差异,
# 会导致意外错误。如果需要动态导入可以使用importlib模块。
import importlib

a = importlib.import_module("math") 
print(a.pi)
====================运行结果=============================
3.141592653589793
====================运行结果=============================

5, el problema de carga de módulos

当导入一个模块时, 模块中的代码都会被执行。不过,如果再次导入这个模块, 则不会再次执行。 

**Python 的设计者为什么这么设计?**
	因为,导入模块更多的时候需要的是定义模块中的变量 、函数 、对象等 。 这些并不需要反复定
义和执行 。 “只导入一次import-only-once”就成了一种优化。 
	**一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象。**

módulo de recarga

有时候我们确实需要重新加载一个模块,这时候可以使用:importlib.reload() 方法:
import import CSDNPythonLearn.moudlar.salary as salary
print("-------华丽分隔符-----------") 
import importlib 
importlib.reload(salary)   # 重新加载了salary

En tercer lugar, el uso del paquete paquete

1, en la operación y de la naturaleza del paquete

我们需要导入 module_AA.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()

nota:

1. from package import item 这种语法中,item可以是包、模块,也可以是函数、类、变量。 
2. import item1.item2 这种语法中,item必须是包或模块,不能是其他。

la naturaleza de importación del paquete

	其实是“导入了包的__init__.py”文件。也就是说,”import pack1”意味着执行了包pack1下面
的__init__.py文件。 这样,可以在__init__.py 中批量导入我们需要的模块,而不再需要一个个
导入。 

**__init__.py 的三个核心作用:** 
	1. 作为包的标识,不能删除。 
	2. 用来实现模糊导入 
	3. 导入包实质是执行__init__.py 文件,可以在__init__.py 文件中做这个包的初始化、以及需
	要统一执行代码、批量导入。

Código de ejemplo:

# 测试包的__init__.py 文件本质用法

# a 包下的__init__.py 文件内容:
import turtle 
import math 


print("导入a包")
# b包下的module_B1.py文件中导入a包,代码如下:
import a 

print(a.math.pi)
====================运行结果=============================
导入a包 
3.141592653589793
====================运行结果=============================
# 如上测试我们可以看出 python 的设计者非常巧妙的通过__init__.py 文件将包转成了模块的操作。
# 因此,可以说“包的本质还是模块”。

2, envuelto en una citación

如果是子包内的引用,可以按相对位置引入子模块 以aa包下的module_AA中导入a包下内容为例: 
		from .. import module_A      #..表示上级目录 .表示同级目录 
		from . import module_A2    #.表示同级目录

3, módulo de sys.path ruta de búsqueda y

	当我们导入某个模块文件时, Python 解释器去哪里找这个文件呢?只有找到这个文 件才能
读取、装载运行该模块文件。它一般按照如下路径寻找模块文件(按照顺序寻找,找到即停不
继续往下寻找): 
		1. 内置模块 
		2. 当前目录 
		3. 程序的主目录 
		4. pythonpath 目录如果已经设置了 pythonpath 环境变量)
		5. 标准链接库目录 
		6. 第三方库目录(site-packages 目录) 
		7. .pth文件的内容(如果存在的话) 
		8. sys.path.append()临时添加的目录
	当任何一个 python 程序启动时,就将上面这些搜索路径(除内置模块以外的路径)进行收集, 
放到sys模块的path属性中(sys.path)。

Utilizar la vista sys.path y modificar temporalmente la ruta de búsqueda

import sys
sys.path.append("D:/")

print(sys.path)
====================运行结果=============================
# 程序的主目录
['E:\\PythonProject\\CSDNPythonLearn\\moudlar', 
# 模块当前目录
'E:\\PythonProject', 
# 标准链接库的目录
'E:\\PythonProject\\venv\\Scripts\\python36.zip', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36', 
# 第三方库目录(如果 pycharm 项目建立了 venv 虚拟环境,则是 venv 目录)
'E:\\PythonProject\\venv', 'E:\\PythonProject\\venv\\lib\\site-packages', 
'E:\\PythonProject\\venv\\lib\\site-packages\\setuptools-39.1.0-py3.6.egg', 
'E:\\PythonProject\\venv\\lib\\site-packages\\pip-10.0.1-py3.6.egg', 
# sys.path.append()临时添加的目录
'D:/']
====================运行结果=============================

En cuarto lugar, la distribución e instalación de módulos

1, el módulo local liberado

	当我们完成了某个模块开发后,可以将他对外发布,其他开发者也可以以“第三方扩展 库”的方式
使用我们的模块。我们按照如下步骤即可实现模块的发布:

1. Crear la siguiente estructura para la carpeta de módulos (por lo general, del mismo nombre y el nombre de la carpeta del módulo):

Estructura de directorios

2. Crear un archivo llamado "setup.py" en la carpeta, de la siguiente manera:

from distutils.core import setup

setup(
    name='computer',  # 对外我们模块的名字
    version='1.0',  # 版本号
    description='这是第一个对外发布的模块,测试哦',  # 描述
    author='Jack',  # 作者
    author_email='[email protected]',  # 邮箱
    py_modules=['computer.computer_price']  # 要发布的模块
)

3. Construir un documento de liberación

通过终端,cd到模块文件夹下面,再键入命令:python setup.py sdist
执行完毕后,目录结构变为:

! [Descripción Insertar imagen aquí] (https://img-blog.csdnimg.cn/20200304151828463.png
4. módulo de instalación local

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

Aquí Insertar imagen Descripción

安装成功后,直接使用 import 导入即可
			import computer.computer_price

V. biblioteca (biblioteca)

1, la biblioteca estándar (Standard Library)

	Python 拥有一个强大的标准库。Python 语言的核心只包含数字、字符串、列表、字典、 文件等
常见类型和函数,而由 Python 标准库提供了系统管理、网络通信、文本处理、数据 库接口、图形
系统、XML 处理等额外的功能。 

Las principales características de la biblioteca estándar de Python son:

1. 文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode 支 持,二进制数据处理等功能 
2. 文件处理,包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能
3. 操作系统功能,包含线程与进程支持、IO 复用、日期与时间处理、调用系统函数、 日志(logging)等功能 
4. 网络通信,包含网络套接字,SSL 加密通信、异步网络通信等功能 
5. 网络协议,支持 HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC 等多种网 络协议,并提供了编写网络服务器的框架 
6. W3C 格式支持,包含 HTML,SGML,XML 的处理 
7. 其它功能,包括国际化支持、数学运算、HASH、Tkinter 等

2, la introducción de extensiones de terceros

	强大的标准库奠定了 python 发展的基石,丰富和不断扩展的第三方库是python壮大 的保证。
我们可以进入 PyPI 官网: https://pypi.org

Ampliación de las bibliotecas de terceros común Resumen
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción

Aprender de: Beijing Shangxue Tang Gao Qi maestro Python 400 conjunto

Publicado 20 artículos originales · ganado elogios 6 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/XuanAlex/article/details/104650801
Recomendado
Clasificación