模块
概念:一系列功能的集合体
定义:创建一个py文件就是一个模块,该py文件名就是模块名
使用:在要使用模块的文件中,通过 import 模块名 来导入模块
模块的四种存在方式:
- 使用python编写的.py文件(任何一个py文件都可以作为模块)
- 包:一堆py文件的集合体
- 使用C编写并链接到python解释器的内置模块
- 已被编译为共享库或DLL的C或C++扩展
导入模块: import module(模块)
- 编译执行模块所对应的py文件,形成对应的pyc文件
- 产生该模块自己的全局名称空间
- 在使用该模块的全局名称空间中产生一个名字(导入的模块名)
import module aaaaa = module import module a = 888 module.b() module.c() print(aaaaa.a) print(a)
# 注: # 1.每一个文件都会产生自己的全局名称空间,且相互不影响 # 2.多次导入,只会编译执行模块一次,将其加载到内存,之后的都是直接对名字的引用
# 1.可以简化模块名字 import mmmmmmmmmmmmmmmmmm3 as my_m3 print(my_m3.num) # 2.可以统一功能 cmd = input('数据库选择 1:mysql | 2:oracle:') if cmd == '1': import mysql as db # mysql.excuse() else: import oracle as db # oracle.excuse() db.excuse()
- from 模块名 import 名字1, 名字2, ..., 名字n(可以指名道姓导入模板中所有想导入的名字)
from 模块名 import *(导入的是模块中的__all__这个列表)
2. 1、系统默认该列表不会收录_开头的名字
2. 2、可以自定义__all__列表来规定外界通过*可以导入的名字
注意:
不建议直接导入 *,因为可读性差,且极容易出现变量重名
- 模块中有 名字a
- from 模块名 import *
- 可以使用模块中的a
- a = 20
- 模块中的a就被覆盖了,且在代码上还不能直接看出
其别名
- from 模板名 import 名字1 as 别名1, ..., 名字n as 别名n
通过__name__来判断
- 在py文件作为模块被使用时,__name__为模块名
- 在py文件自执行时,__name__为字符串 '__main__'
print("共有逻辑") if __name__ == '__main__': # 所有自执行的逻辑 print("m6: 我是自执行的") a = 10 # 产生的是全局的名字 else: # 所有模块的逻辑 print("m6: 我被导入执行的") print(a) # 会报错:走else就不可能走if,所以a压根没产生