第三十三篇 包

一、面向过程编程知识点回顾

面向过程编程:类似于工厂的流水线,机械化、线性化,按照一定的顺序,一步一步的实现想要的效果

二、为什么需要包

1.我们目前写的项目都是一小块一小块的函数体代码,函数比较多,功能比较杂,因此需要进行分类,需要将一个个函数放入.py文件中,这样函数版代码就变成了更加简洁、清晰的文件版代码,也就是将许多函数分装在多个模块中;

2.当模块比较多时,为了更方便的维护代码和导入模块,我们就需要将这些模块放入一个文件夹中,更方便查找、维护和导入,这就是文件夹版代码,也即是包。

3.包本质上也是模块,只是需要先将要用的模块导入_init_.py文件,导入包时更加繁琐一定

三、如何使用包

1.和模块一样都是使用:import / from...import...

2.包用python package创建,也就是文件夹,单纯的文件夹无法作为模块,必须依托文件夹自带的_init_.py文件

3.包会自带__init__.py文件,这个文件可以近似的看作是这个包本身,如果我们需要包中的某个模块,则需要先将该模块导入__init__.py文件,才能在执行文件中导入这个包中的指定模块

四、包被导入的时候发生的三件事

'''
以aaa命名的包为列
1. 打开aaa里的__init__.py文件
2. Python解释器运行解释__init__.py文件,把__init__.py里的名字丢入aaa模块的名称空间
3. 导入aaa其实就是__init__里的名字
'''

需要注意的是,当我们写了一个模块,但是模块太大了,然后放入包内了,别人在你改动之后使用你的模块,就必须得将用模块名m1点出来模块方法改成用包aaa点出模块名来找模块方法

五、包的特点

1.和模块不同点是:模块是直接打开文件,而包打开里面的__init__.py文件

2.包的好处:不改变模块原先的导入方式,并且简化模块开发者的管理复杂度

3.模块本质是文件,包本质是文件夹,但是包其实就是特殊的模块

六、导入包的路径

1.相对路径的好处:万一如果包的名字改变了,使用相对路径不会对包内的文件造成任何影响
好处(需要使用sys模块进行添加路径)

# 执行文件test.py中
# 有模块m1和模块m2在包aaa中,包aaa与执行文件同属一个文件夹A下,可直接导入需要的模块
import m1  # f1()函数在模块1中
m1.f1()

# 执行文件test.py中
# 当包aaa与执行文件不在同一个目录下时,则需要用到sys模块(假如此时包aaa在文件夹B中)
import sys
sys.path.append('包aaa的路径')     # 只需要包aaa的路径且以字符串形式添加
import m1
m1.f1()

2.使用绝对路径相对于执行文件而言,而相对路径相对于文件本身而言

# aaa/__init__.py

from aaa.m1 import func1
from aaa.m2 import func2

3.相对路径:

# .当前(也就是可用于导入同级目录下的模块)
# ..上一级
# ...上一级的上一级

# .号前面必须得是一个包,不能是一个模块
# 当文件是执行文件时,不能用相对路径


# 任何包内
# */__init__.py

from .m1 import func1
from .m2 import func2
原文地址:https://www.cnblogs.com/itboy-newking/p/11038842.html