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:\01_pycharm\venv')
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