模块和包

一模块

一个模块就是包含了python定义和声明的文件,创建一个py文件,给它起一个符合变量名规则的名字,这个名字就是模块名.

模块的使用

import my_module

import 模块的命名空间和当前文件不在同一命名空间中,且模块不可以重复导入,这是因为,模块的导入过程中会先判断这个模块是否导入过,是则引用,否则创建一个属于这个模块的命名空间,让模块名指向这个命名空间,然后才执行模块中的代码.当导入多个模块时,要一个一个的导入,且按照自定义模块,第三方模块,内置模块的顺序导入.

导入的模块中的变量名会被当前文件中的同样变量名覆盖

import my_module  #import导入模块

import sys
print(sys.modules)   #判断模块是否已经导入

from ...  import ...

导入模块中自己想使用的变量名,且没有没被import的名字不可用

from my_module import func #导入my_module模块中的func

from my_module import func1,func2 #导入多个名字

from my_module import func as f #为导入的名字起别名,支持多个,且起别名后,import后的名字将不可用

from my_module import * #等同于import my_module,_开头的名字除外 ,__all__=['money','read1']  可以约束*中变量内容

 

 模块的加载与修改

模块运行后,再修改模块中的内容不会将修改后的内容显示到当前运行结果中

import importlib
importlib.reload(my_module)   #用importlib模块后可以实现实时修改

 

但这种情况只能用在测试环境中

把模块当脚本使用

直接运行py文件那么这个py文件就是以脚本运行的,此时能独立提供一个功能,且__name__ = "__main__" 

若是先导入这个文件,就是一个模块,此时是一个能够被调用的功能,不能自主完成交互,且__name__ = "模块的名字"

添加模块路径

import sys
path = r'D:\路径'
sys.path.append(path)

 

文件夹中含有__init__.py文件则称为包,导入包的实质就是导入__init__.py文件.包是模块的一种形式,包是为用来导入的

注意导入的文件中带有.就是导入包的标志

绝对导入

在执行一个py脚本的时候,这个脚本以及和这个脚本同级的模块中只能用绝对导入
缺点:
所有的导入都要从一个根目录下往后解释文件夹之间的关系
如果当前导入包的文件和被导入的包的位置关系发生了变化,那么所有的init文件都要做相应的调整

 

相对导入

不需要去反复的修改路径只要一个包中的所有文件夹和文件的相对位置不发生改变也不需要去关心当前这个包和被执行的文件之间的层级关系
缺点:
含有相对导入的py文件不能被直接执行
必须放在包中被导入的调用才能正常的使用

 

posted @ 2018-08-27 20:22  YaoSir66  阅读(131)  评论(0编辑  收藏  举报