对今天知识的回顾16

今天学习了

1.模块的概念

2.导入的方式:iimport     from   import

名称空间      绝对导入    起别名

3.环境变量:sys.path

4.导入模块的顺序

5.循环导入:模块间相互导入

模块

常见的四种模块:module

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

2.把一系列模块组织到一起的文件夹

3.使用c编写并连接到python解释器的内置模块

4.已被编译为共享库或dll的c或c++扩展

1.什么是模块:一系列功能的集合体

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

3.怎么使用模块

再要使用模块功能的文件中导入模块:import 模块名   模块名:用来管理一系列功能的文件名

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

导入模块完成的三件事

首次导入

import  模块名

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

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

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

再次导入

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

起别名

import  模块名 as 别名

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

模块的分类

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

模块的加载顺序

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

环境变量

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

import   sys

sys。path。clear就是环境变量

清空环境变量:所有导入都不能使用了

sys。path。clear

添加指定路径到环境变量

sys.path.append()
sys.path.insert()

from...import语法导入

导入完成的三件事

1.将导入的模块编译成对应的pyc文件

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

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

form模块名 import模块中的名字1,。。。。,模块中名字n

from、模块名 import 名字 as别名

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

from...import *

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

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

__all__=

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

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

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

_开头的名字对form    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/zahngyu/p/10815853.html