01.模块的四种形式
python解释器看成手机,pip看成应用管家,模块就是应用软件
-
模块类比
- 系统自带软件(系统自带,不需要安装)
- 现成软件(需要到应用管家下载,安装)
- 自定义的软件(自己编写的功能文件)
-
模块类型
python模块文件==》XX.py
- 内置模块;python解释器自带的模块
- pip安装的模块;pip install XXX 或 pycharm内安装
- 自定义模块;自己用代码编写的实现某一功能的文件
- 包(模块);含有模块文件的文件夹
02.模块的两种导入方式
例;使用time模块中的sleep功能
-
import
- 开辟一块内存空间,内存空间命名为time
- 把time.py中的所有代码读入名称空间,然后运行
- 通过time.sleep()的方法使用time模块中的方法
- 优缺点;
- 优点;一次性导入了.py文件中所有的功能,需要加前缀运行不会与自定义变量名冲突
- 缺点;使用时需要加前缀
-
from time import sleep
- 开辟一块内存空间,内存空间命名为time
- 把time.py中的所有代码读入名称空间,然后运行
- 把sleep()功能读入当前运行文件多开辟的内存空间中,通过sleep()直接使用该方法
- 优缺点;
- 优点;使用方便,不需要加前缀运行(from XX import * ;导入所有功能)
- 缺点;容易与执行文件中定义的变量名冲突
-
自定制模块
使用方法与上述两种相同
自定制模块的用途;分文件储存代码--》函数与函数之间分开--》让代码更加清晰--》不同模块干不同的事情
03.循环导入
当我们定制两个.py文件出现下面的状况时就发生了循环导入
重复导入相同名称的.py文件只会创建一个内存地址
from XX import X 是在做两件事,当两件事都失败时报错
# m1.py
from m2 import y # 创建m2内存空间,让m1的内存空间得到y=20
x=10
print(x,y)
# m2.py
from m1 import x # 创建m1内存空间,让m2的文件内存得到x=10
y=20
print(x,y)
顺序;我们运行m1.py文件 ——》创建m2内存空间,导入y失败——〉访问m1空间导入x失败——》继续运行导入y再次失败报错 ‘无法自m2导入y’
破解方法
# m1.py
def f1():
from m2 import y
print('m1:', x, y)
x = 10
f1()
# m2.py
def f2():
from m1 import x
print('m2:', x, y)
y = 20
04.模块搜索路径
内存——内置——自定义
05.python文件的两种用途
python文件既可以是执行文件,也可以是模块文件
__name__=='__main__';文件为执行文件时
文件为模块文件时__name__==文件名
# __name__是每个文件独有的,当该文件作为执行文件运行时,__name__等于'__main__';当该文件作为模块文件导入时,__name__等于文件名