Python第十三课(模块1)
Python第十三课(模块1) >>>转到思维导图>>>转到中二青年
1.什么是模块?
1模块就是一系列工能的结合体 2模块的三种来源: 1.内置的(python解释器自带) 2.第三方的(别人写的) 3.自定义的(你自己写的) 3模块的四种表现形式 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块) 2.已被编译为共享库或DLL的C或C++扩展(了解) 3.包好一组模块的包:把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包) 包:一系列py文件的结合体 4.使用C编写并链接到python解释器的内置模块
2.为什么要用模块?
1.从文件级别组织程序,更方便管理。
当多个文件中都需要使用相同的方法的时候 可以将该公共的方法写到一个py文件中,其他的文件以模块的形式导过去直接调用即可
2.拿来主义,提升开发效率
3如何使用模块?
1.import的使用 模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行 2.在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果 1.首先创建一个执行文件(run.py)的名称空间,执行模块文件 在模块中定义的函数和方法若是使用到了global时访问的就是这个名称空间 2.运行模块文件(md.py)中的代码将产生的名字与值存放到执行文件(run.py)的名称空间中 在新创建的命名空间中执行模块中包含的代码 3.在执行文件中产生一个执行指向名称空间的名字(md) 创建名字来引用该命名空间 3from...import...句式缺点: 1.访问模块中的名字不需要加模块名前缀 2.在访问模块中的名字可能会与当前执行文件中的名字冲突 4补充知识点: __name__ 当文件被当做执行文件执行的时候__name__打印的结果是__main__ 当文件被当做模块导入的时候__name__打印的结果是模块名(没有后缀) __all__ __all__可以指定当所在py文件被当做模块导入的时候,可以限制导入者能够拿到的名字个数 from md1 import * 一次性将md1模块中的名字全部加载过来 不推荐使用 并且你根本不知道到底有哪些名字可以用 异常有两大类 1.语法结构错误:需要你当场修改 异常捕获没法完成 2.逻辑错误:异常捕获可以处理
4.循环导入
1.如果出现循环导入问题 那么一定是你的程序设计的不合理。循环导入问题应该在程序设计阶段就应该避免。 2.解决循环导入问题的方式 1.方式1:将循环导入的句式写在文件最下方() 2.方式2:函数内导入模块
5.模块的查找顺序
1.先从内存中找 2.再从内置中找 3.最后环境变量(sys.path)中找 一定要分清楚谁是执行文件谁是被导入文件sys.path返回的是一个大列表,里面放了一对文件路径,第一个路径永远是执行文件所在的文件夹注意:py文件名不应该与模块名(内置的,第三方)冲突
6.绝对导入与相对导入
1绝对导入
绝对导入必须依据执行文件所在的文件夹路径为准
绝对导入无论在执行文件中还是被导入文件都适用
2相对导入
.代表的当前路径
..代表的上一级路径
...代表的是上上一级路径
注意相对导入不能再执行文件中使用
相对导入只能在被导入的模块中使用,使用相对导入就不需要考虑执行文件到底是谁,只需要知道模块与模块之间路径关系
7.软件开发规范
项目名
bin文件夹
start.py项目启动文件
conf文件夹
settings.py项目配置文件
core文件
src.py项目核心逻辑文件
db文件夹
数据库文件
lib文件夹
common.py项目所用到的公共的功能
log文件夹
log.log项目的日志文件
readme文本文件 介绍项目
start.py格式
import sys import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) """ pycharm会自动将你新建的最顶层的目录自动添加到环境变量中 上面这两句话 不是针对你的 是针对下载你这个软件的用户 """ from core import src if __name__ == '__main__': src.run() # 1.将core文件路径添加到system path中 ...太low # 2.将ATM文件夹添加到system path中
END