一、什么是包
在 Python 中,包(Package)也是一个模块。当我们模块中代码过多时,或者一个模块需要被分解为多个模块时,这时就需要使用包。普通的模块就是一个 py 文件,而包一个分级层次的目录结构,它将一组功能相近的模块组织在一个目录下。这样,既可以起到代码规范的作用,又能避免模块名重名引入的冲突。在包中,必须要有一个 __init__.py
这个文件,这个文件中可以包含中的主要内容。
使用 import 语句首次导入包时,会产生一个名称空间。然后会运行该包下的 __init__.py
文件,将运行过程中生成的名字都会丢到这个名称空间中。然后会在当前执行文件的名称空间拿到一个名字,该名字指向被导入的包的名称空间。
在 Python 3 中可以没有
__init__.py
文件;
二、创建包
创建一个 【arith】 文件夹,并在该文件夹下创建一个 __init__.py
文件。
python
num1 = 30
num2 = 40
def add():
print("我是arith包下__init__模块中的add()方法")
在 【arith】 目录下,创建 【extension】 文件夹,并在该文件夹下创建一个 __init__.py
文件。
python
num3 = 30
num4 = 40
def factorial():
print("我是arith包下extension模块中的factorial()方法")
三、包的使用
我们可以通过 "import 完整包名.模块名" 的方式加载指定模块。
python
import arith
arith.add()
python
import arith.extension
arith.extension.factorial()
我们还可以通过 "from 完整包名 import 模块名" 的方式加载指定的模块。
python
from arith import extension
extension.factorial()
我们还可以通过 "from 完整包名.模块名 import 变量 " 的方式加载指定模块中的指定结构。
python
from arith import add
add()
python
from arith.extension import factorial
factorial()
__pycache__
目录下的文件模块的缓存文件。Python 代码在执行前,需要被解析器先转换为机器码,然后再执行。所以我们在使用模块(包)时,也需要将模块中的代码先转换为机器码然后再交由计算机执行。而为了提高程序的运行的性能,Python 会在编译一次以后,将代码保存到一个缓存文件中。这样在下次加载这个模块(包)时,就可以不再重新编译而是直接加载缓存中编译好的代码即可。