💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 8.1 【基础】什么是包、模块和库? Python 中除了函数库以外,还有非常多且优秀的第三方库、包、模块。 那么问题就来了,库、模块和包各是什么意思? 它们之间有什么区别呢?今天就一起来学习下。 ## 1. 模块 以 `.py` 为后缀的文件,我们称之为 模块,英文名 Module。 模块让你能够有逻辑地组织你的 Python 代码段,把相关的代码分配到一个模块里能让你的代码更好用,更易懂。 假设现在有一个名为 `demo.py` 的文件,文件内容如下 ```python name="Python编程时光" print("导入成功") ``` 直接使用 import 语句就可以导入,导入之后,就可以使用 `模块名.变量名` 的方式访问这个变量。 ```python >>> import demo 导入成功 >>> demo.name 'Python编程时光' >>> ``` 在导入模块的时候,有一个非常重要的全局变量需要掌握,那就是 `__name__` 这个变量。 现在把 `demo.py` 的内容改成 ```python $ cat demo.py print("__name__ 的值为: " + __name__) ``` - 当模块被直接执行时, `__name__` 的值为 `__main__` ```python $ python demo.py __name__ 的值为: __main__ ``` - 当模块被导入时, `__name__` 的值为 模块名 ```python >>> import demo __name__ 的值为: demo ``` 当该模块被导入后,会在当前目录下产生一个 叫做 `__pycache__` 的缓存文件夹。 ```shell $ tree . ├── __pycache__ │   └── demo.cpython-39.pyc └── demo.py ``` 这个文件夹有什么用呢? 简单来说,当你导入模块的时候,Python解释器会把模块的代码编译成字节码,并放入 `__pycache__`文件夹中。 这样以后再次运行的话,如果被调用的模块未发生改变,那就直接跳过编译这一步,直接去`__pycache__`文件夹中去运行相关的 *.pyc 文件,大大缩短了项目运行前的准备时间。 ## 2. 包 在早一点的 Python 版本(Python 3.3 之前)中,如果一个文件夹下有一个 `__init__.py` 文件,那我们就称之为包,英文名 Package。 在后来的 Python 版本(Python 3.3 开始)中,就没有这个要求了,只要是文件夹就可以当做包,我们称之为空间命名包,为做区分,我把上面那种包称之为 传统包。 考虑到很多人其实并不需要接触到空间命名包,所以我将空间命名包的内容单独放在一节里,为选读章节。 今天这节里主要讲讲传统包的内容。 传统包里的 `__init__.py` 可以为空文件,但一定要有该文件,它是包的标志性文件,在需要情况下可以在里面进行一些包的初始化工作。 ```shell $ tree . └── demo ├── __init__.py ├── bar.py └── foo.py ``` 一个包里可以有多个模块,比如上面的 `foo.py` 和 `bar.py` 都属于 demo 模块。 如果要使用这些模块,就需要这样导入 ```python >>> import demo.foo 成功导入 foo.py >>> import demo.bar 成功导入 bar.py ``` 或者这样 ```python >>> from demo import foo 成功导入 foo.py >>> from demo import bar 成功导入 bar.py ``` ## 3. 库 Python 库是指一定功能的代码集合,通常认为他是一个完整的项目打包。 库->包->模块,是从大到小的层级关系! - 库:一个库可能由多个包和模块组成 - 包:一个包可能由多个模块组成 - 模块:一堆函数、类、变量的集合