python模块第一印象


一、模块的基本信息

二、模块的导入方式
三、模块的导入细节
四、模块循环导入问题的原因及解决

-------------------------------------------------------------------------------

一、模块的基本信息
1、定义:一系列功能的集合体,用于完成某个特定的工作,类如保洁,需要的工具箱。
2、出现的原因:很多相互的类似功能,为了方便统一管理,将这些功能放到一个文件中,形成一个集合体,这个文件我们称之为模块。
3、常见的四种模块来源:
1、使用python编写的.py文件
2、从包中获取,把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
3、内置模块,系统启动时也会调用的模块,使用C编写并链接到python解释器的内置模块
4、第三方库,提供的自定义模块,就是已被编译为共享库或DLL的C或C++扩展

二、模块的导入方式

1、格式: 在要使用模块功能的文件中导入模块格式:import 模块名 - 模块名:用来管理一系列功能的文件名
2、模块导入过程分析
第一次导入待遇:
1、将被导入模块进行预编译,形成相对应的pyc文件。
2、进入被导入模块,执行模块文件内部代码,同时生成模块相对应的全局名称空间。
3、在使用模块的文件中,产生一个与模块名同名的变量,指向模块的全局名称空间。
非第一次导入:
只会进行第三部操作:在使用模块的文件中,产生一个与模块名同名的变量,指向模块的全局名称空间。


三、模块的导入细节
1、模块分类:第一类:内置模块(built-in),第二类:自定义模块其中,包括(系统提供的lib文件下),第三方提供,自定义的py文件模块。
2、 模块的加载顺序:内存中的模块-内置模块-sys.path下的文件。
3、关于sys.path环境变量:
获取方式:import sys | sys.psth得到就是一个列表格式存储的是绝对路径。
清空环境变量:sys.path.clear(),清空后导入自定义模块变量就不能在使用。
添加指定路径到环境变量:
sys.path.append(r'path') | sys.path.insert(0,r'path')
4、模块的部分功能导入
语法一:from m1 import fn1,fn2 ...fnn
语法二:from m1 import fn1 as f
两种方式进行部分导入。
同时from...import导入依赖环境变量 sys.path
语法三:from m1 import * 导入m1中全部的变量。
其中模块中所有的变量都存在于一个列表中,__all__=[]'a', 'b', 'c', 'd_', '_e'
注意的是:系统默认添加的__all__中不会纳入 _开头的名字,所以*将会对下滑线变量进行隐藏,但是指名道姓的依然可以导入。

 


四:模块循环导入问题的原因及解决

基本规则:
规则一:在程序中当遇到模块的二次导入,都是直接引用内存的名称空间,不会在进入模块创建名称空间。
规则二:只要能拿模块地址,就可以对其进行调用执行。

循环导入的问题点:名字没有产生就使用名字!
解决方案:
1、先产生名字,在导入模块
2、使用时再导入,进行延后导入,但是只针对需要自定义的模块,内置模块,不会与自定义函数互相导入,所以不存在循环导入。


# 问题
# 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)

posted @ 2019-05-05 19:44  企鹅向前囱  阅读(169)  评论(0编辑  收藏  举报