5.06—017—周一

今日所学内容:

    一、跨文件夹导入模块

    二、模块被执行的两种方式

    三、包

    四、包的管理

一、跨文件夹导入模块

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)导入的手段:指名道姓到某一个模块或者是指名道姓到某一个模块中的名字

猜你喜欢

转载自www.cnblogs.com/Chinesehan/p/10819951.html
017