Python基础 --【包】

189 阅读2分钟

1、什么是包?

包: 就是一个文件夹

2、包和文件夹区别

  • 在python3以前,包中是有一个文件__init__.py,没有该文件的就是一个普通的文件夹,有该文件的才是包;
  • 在python3以后,不管有没有,都认为是一个包。

3、创建包

创建包步骤 截屏2022-10-05 07.08.42.png

4、使用包中模块成员

① 使用import方式导入模块

示例

第一步:新建包(nurmal_dir)并在包中新建模块(a.py)

n = 1

第二步:调用模块a.py中成员

import nurmal_dir.a 

print(nurmal_dir.a.n)

######结果######
1

别名形式

import nurmal_dir.a as x

print(x.n)

######结果######
1

② 使用from-import方式导入模块

从包中导入模块,使用时需要模块名.成员名来调用成员

示例

第一步:新建包(nurmal_dir)并在包中新建模块(a.py)

n = 1

第二步:调用模块a.py中成员

from nurmal_dir import a

print(a.n)

######结果######
1

如果想直接使用成员,可以使用from 模块名.模块名 import *

from nurmal_dir.a import *

print(n)

######结果######
1

5、可以直接导入到包位置??

示例

import nurmal_dir

print(nurmal_dir.a.n)

######结果######
报错

通过结果说明:如果只导到包的位置,那么通过这个包去找这个模块时,会报错。因为不确定要导入哪个模块。

如何解决呢??

答: 需要在包中的__init__.py中,告诉解释器,当导入包时,应该导入哪些模块。

在包中__init__.py中写入如下代码:

from . import a   # .是当前目录

再次导入包

import nurmal_dir

print(nurmal_dir.a.n)

######结果######
1

通过结果说明:当在使用import方式或from-import方式导入包时,需要在__init__.py文件中,明确的指出可以被导入的模块有哪些(使用from . import 模块名 形式指定)。如果在该文件中没有指定可以导入的模块时,默认不导入任何模块。

6、拓展

还可以在__init.py模块中使用__all__,但是这种方式不通用。只能用在from 包名 import *导入所有模块的情况,通过这个__all__可以来设置哪个模块可以被导入。 第一步:创建包(normal_pack)在包中创建a.py模块和b.py模块

a.py

n = 1

b.py

m = 2

第二步:在init.py中输入以下代码

__all__ = ["a"]

第三步:导入模块

from normal_pack import *

print(a.n)

######结果######
1

如果使用b.m就会出错,__init__模块中__all__方法没有添加b模块。

7、包导入方式小结

导入方式使用方式
import 包名.模块名包名.模块名.成员
from 包名.模块名 import 成员直接使用成员
from 包名 import 模块名模块名.成员
from 包名.模块名 import *直接使用成员