今日所学内容:
一、跨文件夹导入模块
二、模块被执行的两种方式
三、包
四、包的管理
一、跨文件夹导入模块
1、如果a文件夹所在目录在环境变量,a文件夹中的ma模块可以被以下方式导入
import a.ma | from a import ma
2、如果a文件夹所在目录在环境变量,a文件夹中的b文件夹的mb模块可以被以下方式导入
import a.b.mb | from a.b import mb
3、如果a文件夹所在目录在环境变量,a文件夹中的b文件夹的mb模块中的bbb名字要被直接导入
import a.b.mb.bbb # 错误:所有 . 左侧必须是 文件夹 *****
from a.b import mb.bbb # 错误:所有 . 左侧必须是文件夹
from a.b.mb import bbb # 正确
二、模块被执行的两种方式
1、一个 py文件作为自执行文件,__name__ 变量的值为 ‘__main__‘
2、一个 py文件作为模块被导入执行,__name__ 变量的值为 ‘文件(模块)名‘
如何区别两种方式,并且可以让一个文件既可以自执行,也可以被导入执行 两种方式共存
在这样的py文件中写: if __name__ == ‘__main__‘:
自执行的逻辑 => 因为在文件作为模块使用时 __name__为文件名,不满足条件
三、包 *****
1、包的定义:一系列模块的集合体,用文件夹来管理一系列有联系功能的模块,该文件夹被我们称之为包,文件夹名就是包名
2、包 与 普通文件夹存在区别:包的文件夹中一定存在一个 __init__.py 文件
__init__.py 文件在 python2中必须创建,在python3中建议创建,当不创建时系统会自动创建
3、__init__.py 文件在包中的作用:
1)会产生一个全局名称空间,提供给包,就代表包的名称空间
2)可以把包中的变量名放入 __init__.py 文件中,方便管理、调用。 未放入的变量名不能直接调用
4、导包完成的三件事
1)编译形成的包中会形成一个 __init__.py 文件的pyc文件
2)执行__init__.py文件,形成一个全局名称空间,将包中所有变量名存放其中,该名称空间就代表包的名称空间
3)在导包的文件中,产生一个与包名相同的名字,指向包的名称空间(__init__.py文件的全局名称空间)
四、包的管理
1、在包中采用相对导入管理模块或模块中的名字
2、在包的__init__.py文件或者在包中的任意一个模块中
. 代表当前文件所在目录
.. 代表当前文件所在目录的上一级目录
注:. 语法不能出包,因为 包 以外的文件都能自执行,但拥有 . 开头导入的文件采用相对导入不能自执行
3、怎样直接使用包中模块
1)如果只是想作为普通文件夹,python3中可以省略__init__文件,但是文件夹本质上还是 包
2)导入的手段:指名道姓到某一个模块或者是指名道姓到某一个模块中的名字