1.模块:
import一个模块相当于执行了这个模块
2.在import模块的时候发生的事情
1.寻找模块
2.如果找个了这个模块,就开辟一个内存空间,并执行这个模块
3.把这个模块中的所有用到的名字都收录到这个开辟的内存空间中
4.创建一个变量来引用这个模块的空间
3;模块特点:
1.同一个模块在同一个py文件中不会被重复导入
2.模块开辟的内存空间与文件的内存空间始终是隔离的
3.自定义的模块的名字命名格则需要符合变量的命名格则
import Student_message Student_message.study()
4,导入多个模块,可以一行导入多个,但是不推荐这样做,因为不符合pep8规范
并且导入的模块应该按照内置,第三方,自定义的顺序导入,并且两两之间空一行
目的是为他人使用自己的代码时,能够轻易区分这些模块.
5.给模块起别名.
import study as a a.name study.name #原模块名引用无效
def file_1(read): if read == 'json': import json with open('path','w') as f: json.dump([1,2,3,4,5],f) elif read == 'pickle': import pickle with open('path','w') as f: pickle.dump([1,2,3,4,5],f) # 使用模块别名简化代码 def file_1(read): if read == 'json': import json as a elif read == 'pickle': import pickle as a with open('path','w') as f: a.dump([1,2,3,4,5],f)
6.模块搜索路径:
一个模块能否可以导入,就看这个模块所在的目录在不在sys.path中
正常的sys.path中除了内置,扩展模块所在的路径之外,
只有一个路径是永远不会出问题:直接执行这个文件所在的目录
import sys print(sys.path)
路径报错 # ModuleNotFoundError,把文件所在目录的路径加到sys.path中
import sys sys.path.append(r'E: 1_pycharmvenv') import study
7.两种运行一个py文件的方式:
直接运行:cmd python xx.py pycharm 脚本
__name__ == '__main__'
导入它:模块
__name__ == '模块名'
8.from import的过程
找到模块名
开辟内存空间,执行模块
所有模块中的名字都存到这个内存空间中
建立一个引用name,read2分别引用模块空间中的名字
from study import name print(name) from study import name,read2 name = 'alex' read()
from study import name,rand1,read2 from study import name as a,read1 as b,read2 as c from study import * #默认所有可以调用,但是加了__all__[]后,只有里面有的名字才可以用,或者再导入一次要使用的名字
9:包
从包中导入模块:
import glance2.api.policy as policy policy.get() # 2 from glance2.api import policy policy.get() # 3 from glance2.api.policy import get get()
导入包:
绝对导入:glance2.api.policy.get()
导入包的过程发生了什么?
相当于执行了这个包的__init__.py文件
sys.patn中的内容,永远是当前你执行的文件
相对导入: 运用了相对导入的文件,不能被直接执行
'.'表示当前目录
'..'表示上级目录
import glance3
form outer import glance3