- '''
- 模块: 一系列功能的集合体
- ?
- 定义模块: 创建一个 py 文件就是一个模块, 该 py 文件名就是模块名
- ?
- 使用模块: 在要使用模块的文件中, 通过 import 模块名 来导入模块
- ?
- 模块的四种存在方式:
- 1. 使用 python 编写的. py 文件 (任何一个 py 文件都可以作为模块)
- 2. 包: 一堆 py 文件的集合体
- 3. 使用 C 编写并链接到 python 解释器的内置模块
- 4. 已被编译为共享库或 DLL 的 C 或 C++ 扩展
- '''
- ?
- '''
- import module
- # 1. 编译执行模块所对应的 py 文件, 形成对应的 pyc 文件
- # 2. 产生该模块自己的全局名称空间
- # 3. 在使用该模块的全局名称空间中产生一个名字 (导入的模块名)
- '''
- ?
- '''
- # 注:
- # 1. 每一个文件都会产生自己的全局名称空间, 且相互不影响
- # 2. 多次导入, 只会编译执行模块一次, 将其加载到内存, 之后的都是直接对名字的引用
- '''
- ?
- '''
- 优点:
- 1. 从文件级别组织代码, 是同特性的功能能统一管理
- 2. 可以使用系统或第三方模块 (拿来主义), 来提高开发效率
- '''
起别名
- # 在任何地方都可以导入模块
- def fn():
- global m3
- import m3 # 就是普通的名字, 只是该名字执行的是一个 py 文件 (全局名称空间)
- print('>>>', m3.num)
- fn()
- print(m3.num)
- ?
- ?
- # 通过 as 关键字可以给模块起别名: 模块名一旦起别名, 原模块名就不能再使用
- # 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 导入
from 模块名 import 名字 1, 名字 2, ..., 名字 n
- # 可以指名道姓导入模板中所有想导入的名字
- ?
- ?
from 模块名 import *
- # 导入的是模块中的__all__这个列表
- # 1, 系统默认该列表不会收录_开头的名字
- # 2, 可以自定义__all__列表来规定外界通过 * 可以导入的名字
- ?
- ?
- # 不建议直接导入 *, 因为可读性差, 且极容易出现变量重名
- # 模块中有 名字 a
from 模块名 import *
- # 可以使用模块中的 a
- a = 20
- # 模块中的 a 就被覆盖了, 且在代码上还不能直接看出
- ?
- ?
- # 起别名
from 模板名 import 名字 1 as 别名 1, ..., 名字 n as 别名 n
自执行与模块区别
- # __name__:
- # 1. 在 py 文件作为模块被使用时,__name__为模块名
- # 2. 在 py 文件自执行时,__name__为字符串 '__main__'
- ?
- print("共有逻辑")
- if __name__ == '__main__':
- # 所有自执行的逻辑
- print("m6: 我是自执行的")
- a = 10 # 产生的是全局的名字
- else:
- # 所有模块的逻辑
- print("m6: 我被导入执行的")
- print(a) # 会报错: 走 else 就不可能走 if, 所以 a 压根没产生
总结
'''
模块的概念: 一系列功能的集合体
为什么要使用模块: 使用模块后的优点: 1 文件角度考虑代码, 2 拿来主义, 提供开发效率
py 中实现模块的方式: 4 种, 重点: py 文件
?
?
定义模块: 新建一个 py 文件: 文件名就是模块名, 尽量采用全英文, 可以结合数字与下划线
使用模块: 可以不用起别名, 但一旦起别名, 原名字就不能再使用了
-- import 模块名 as 别名
-- from 模块名 import 名字 as 别名
自执行文件与模块区分:__name__
# 1. 在 py 文件作为模块被使用时,__name__为模块名
# 2. 在 py 文件自执行时,__name__为字符串 '__main__'
'''
来源: http://www.bubuko.com/infodetail-3015811.html