模块简介
1.模块就是一系列的功能结合体,使用模块相当于拥有了模块内一系列功能
------------
2.模块分类
- 内置模块 :解释器自带的,可以直接使用的模块
eg:
import time
time.sleep()
- 自定义模块 : 自己写的模块
eg:
注册功能 ,登录功能
- 第三方模块 :别人写好的放在网络上的模块 使用需要提前下载
------------
3.模块的表现形式
1.py文件(py文件也可以称之为是模块文件)
2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
3.已被编译为共享库或DLL的c或C++扩展
4.使用C编写并链接到python解释器的内置模块
导入模块的两种句式
1.import 句式
#建一个md文件 用import方法导入
import md # summer
#第一次是直接执行md文件里的代码运行
print(md.name) # summer
#通过文件名.点的方式,使用该文件内部的变量名并打印
- 模块导入会产生执行文件的名称空间
假设import md的文件名是a
导入动作会令a产生一个全局名称空间
- 产生被导入文件的名称空间并运行该文件
相当于a文件的名称空间是md文件的名称空间内容
可以在a名称空间里用点的方式执行md文件里的所有代码
- 在执行文件中获取一个模块的名字 ,并通过点的方式使用到被导入文件名称空间的名字
print(md.name)
***同一个文件反复导入相同的模块,导入的句式只会执行一次
# import导入
import md # summer
import md 无效
import md 无效
import 可支持一次导入多个模块
eg :有两种方式
import time , md, a,等等
#这种建议模块功能相似的可以用词方法
import time
import md
import a
# 其他情况建议还是使用这种方式
------------
2.from...import句式
#md文件用from方法导入
from md import name #summer
#从md文件的名称空间中取一个name的变量名
#导入模块会执行被导入文件的代码
from md import pwd
print(pwd) # 123
#现在的from名称空间里的名字是pwd
import后面是指名道姓的从md文件中导入某个具体名称
-创建执行文件的名称空间
导入模块动作会创建from的名称空间
-创建被导入文件的名称空间
运行导入模块会产生被导入文件的名称空间
-执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中
-在执行文件中获取到指定的名字 指向被导入文件的名称空间
from md import name,pwd,a...
#这种多个变量取值的方式适用于一个模块内的多种取值操作
*全导入模式
from md import * # *表示所有
用于需要导入模块空间名字比较多的时候
s:针对*号的导入还可以控制名字的数量
在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字
两种句式的优缺点
1.import
优点:用md.点的方式可以任意执行被导入的文件里的代码
缺点:就是导入就可以用到被导入文件里的所有内容也不是绝对的优点,有时候可能也不想让操作者拥有这么多权限
------------
2.from ...import
优点:指定变量名的使用方式 不需要加模块文件名的前缀
缺点:变量名及其容易产生冲突
eg:
from md import name
print(name) #summer
from md import name
name = 'jason'
print(name) #jason
#变量名与绑定的值发生了修改 此时的from就没有执行
模块的查找顺序
1.先在内存中查找
2.再在内置中查找
3.然后再去程序系统环境变量中查找sys.path
------------
1.导入一个文件,然后再导入的过程中删除该文件,结果是还能执行该文件代码
import time
import md
time.sleep(6)
print(md.name) # summer
------------
2.创建一个跟内置模块名相同的文件名
#import time
#print(time.time()) #1657701847.704229
from time import name
print(name) #报错
ps:创建模块文件的时候尽量不要与内置模块名冲突
------------
3.所有的操作都是按照文件路径来的
import sys
sys.path.append(r'D:\pythonProject7.13')
import summer
print(summer.name) #hu
from summer import name
print(name) #hu
ps:1.通用的方式
sys.path.append(目标文件所在的路径)
2.利用from...import句式
起始位置一定是执行文件所在的路径文件夹
from xxx import mdd