5.05—016—周日

今日所学内容:

    一、模块的概念

    二、导入模块完成的三件事

    三、模块的分类与加载顺序

    四、环境变量

    五、from...import 语法导入

    六、from...import*

    七、链式导入

    八、循环导入

一、模块的概念

1、什么是模块:模块就是一系列功能的集合体(函数的集合体)

2、为什么会出现模块:当出现很多相似的功能时,需要统一管理,将这些功能放在一个文件中,该文件就是管理这些功能的集合体,我们命名为模块

3、怎么使用模块:在要使用模块功能的文件中导入模块:import 模块名      — 模块名:用来管理一系列功能的文件名

4、在哪使用模块:在所有要使用模块中功能的文件中导入并使用模块

5、常见的四种模块:module

  1)使用python编写的.py文件

  2)把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

  3)使用C编写并链接到python解释器的内置模块

  4)已被编译为共享库或DLL的C或C++扩展

二、导入模块完成的三件事

1、首次导入:  import 模块名

  1)将被导入的模块编译,形成对应的pyc文件

  2)进入模块,从上执行模块中的代码,将产生的所有名字存放在该模块文件的全局名称空间中

  3)在使用模块的文件中,产生一个与模块名(模块文件名)同名的名字,指向模块的全局名称空间

2、再次导入

  不再执行导入模块的前两步,只执行第三步:在当前模块中产生一个名字,指向第一次导入在内存中产生的全局名称空间

3、起别名

      import 模块名 as 别名

  重点:导入一旦起别名,原模块名变量失效,本质上只产生了别名变量指向模块文件的全局名称空间

三、模块的分类与加载顺序

1、分类:

  大方向:内置(built-in) | 自定义(系统提供 | 第三方提供 | 自己自定义)

2、加载顺序:

  内存 > 内置 > sys.path (安装环境变量中路径的先后顺序逐一加载)

四、环境变量

环境变量:存放路径的list,第一位默认一定是当前执行文件所在的路径

  import sys
  sys.path就是环境变量

清空环境变量:所有导入都不能使用了
  sys.path.clear()

添加指定路径到环境变量

  sys.path.append()     只能从后面增加

  sys.path.insert()     可以从任意位置插入

五、from...import 语法导入

1、导入完成的三件事

  1)将被导入的模块编译形成对应的pyc文件

  2)进入模块,从上执行执行模块中的代码,将产生的所有名字存放在该模块文件的全局名称空间中

  3)在导入模块的文件中形成(一个或多个)名字指向模块全局名称空间中的(一个或多个)具体名字

2、导入的格式

  from 模块名 import 模块中的名字1, ..., 模块中的名字n

  from 模块名 import 名字 as 别名

  

  from...import 导入依赖环境变量 sys.path

六、from...import*

模块中默认会添加 __all__ ,__all__ 就是管理模块中能被 * 导入的变量们

__all__可以自定义,自定义 * 能导入的变量们, __all__的list中名字全部可以自定义

  Eg:  __all__ = ['a', 'b', 'c', 'd_', '_e']

系统默认添加的__all__中不会纳入 _开头的名字

  -- 所以默认在外界通过from...import *无法导入_开头的名字

  -- _开头的名字对from...import *是隐藏的,指名道姓依然可以被外界导入使用

七、链式导入

  t1导入m1,m1导入m2,m2导入m3

执行流程:右键执行t1,在t1导入m1模块的地方直接进入m1,去执行m1,同理在m1执行过程中遇到导入m2,会马上进入m2,去执行m2,一直到m3,m3执行完毕,会回到m2中导入m3的语句,接着往下执行m2,m2执行完毕回到m1,以此类推返回到t1

在整个执行流程中,遇到任何模块的二次导入,都是直接引用内存中的名称空间,不会再次进入模块

八、循环导入

循环导入的问题点:名字没有产生就使用名字

解决循环导入:先产生名字,在导入模块

  -- 将会产生循环导入的模块,导入语法延后 - 延后导入

问题:
m1.py
  import m2
  print(m2.y)
  x = 666
m2.py
  import m1
  print(m2.x)
  y = 888

解决:
m1.py
  x = 666
  import m2
  print(m2.y)
m2.py
  y = 888
  import m1
  print(m2.x)

把需要用的变量放到导入之前

猜你喜欢

转载自www.cnblogs.com/Chinesehan/p/10813242.html