模块

1.模块 相关感念

import 模块名
from...import....

2.循环导入
3.绝对导入
4.相对导入
5.软件开发目录规范

模块:一系列功能的集合体
1.来源:1.内置的(自带的)
2.第三方的(别人写的)
3.自定义的(自己写的)
2.表现形式:
1.用python 编写的 py文件(模块)
2.已被编译为共享的库 或dll的c 或 c++扩展(了解)
3.把一系列模块组织一起的文件夹(包,文件夹内有__innit__.py文件)
包:一系列模块的集合体
4.使用c 编写并连接到 python解释器的内置模块(了解)
3.优点
1.用别人写的模块,可以极大的提高开发效率;
2.用自己写的模块,提高代码复用性,把公共的方法 放入一个py文件,其他文件需要用该方法是,当成模块,导入调用就可以了
4.导包
注: 导入时不要加文件的后缀(*****)
导包要区分那个是执行文件,那个是被导入文件(*****)
区分执行文件的 两种方式:
当文件被当做执行文件执行的时候,__name__ 打印的是__main__
当文件被当做模块导入的时候,__name__


if __name__ == '__main__':
run()
导模块时干了些什么:
.运行执行文件,会创建一个执行文件的名称空间
首次导入(md): 1.将被导入模块编译成pyc文件;
2.进入模块运行,执行模块中的代码将产生的名字与值存放到该模块文件的全局名称空间中
3.在执行文件中产生一个指向名称空间的名字
多次导入:不再执行模块的前两步骤。只会走第三步:在当前模块中产生一个名字,指向第一次导入在内存中产生的全局名称空间
import:
特点:模块名.名字
1.指名道姓的访问模块中的名字,永远不会与执行文件中的名字冲突
2.想访问模块中的名字,必须用模块名.名字
补充点:
1.当模块名比较复杂的情况下,可以给该模块起别名
2.可以 import os,sys....(前提有联系,或同属一个模块)
3.
from...import...
.访问没款中的名字不用加模块名前缀


.在访问模块中的名字 可能会与当前执行文件中的名字冲突(缺点)


补充: from 模块名 import * 可一次性将模块中的名字全部加载过来 (不推荐用)
双下all 方法 可以指定所在py文件被当做模块导入时,可以限制导入能够拿到的名字个数



循环导入:你导我,我导他,调用时名字还没产生就使用名字


.产生原因:程序设计不合理,在设计初期尽量避免


.解决方法:
1. 将循环导入的句式写在文件的最下方,先产生名字,在导入模块
2. 函数内导入模快


模块的查找顺序:
结论:先从内存中找 --->内置中找 --->sys.path中找(环境变量) (是一个大列表,第一个路径是当前执行文件所在文件夹)


注: .左边是文件夹 .右边可以使文件夹也可是名称


绝对导入:
绝对倒入必须依据执行文件所在的文件夹路径为准
绝对导入无论在执行文件中还是在被导入文件中都适用


相对导入:
.代表当前路径
..代表上一级路径
...代表上上以及路径
相对导入只能在被导入的模块中使用,不能在执行文件使用;
使用相对导入,就不需要考虑执行文件到底是谁, 只要知道模块与模块之间的路径关系就行了


软件开发目录规范:
1.项目的启动文件通常放在两个地方
a.bin文件夹下
a.start:
1.将单个的文件路径挨个添加到环境变量中
2.可直接将整个文件夹添加到system path 中
eg:
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
注:pycharm 会自动将你新建的最顶层的目录自动添加到环境变量中,
统一写上,是为了下载这个软件的用户
b.项目根目录下
b.run:
sys.path.append(os.path.dirname(__file__))
2.conf
settings
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
LOG_PATH = os.path.join(BASE_DIR,'log')#不要手动拼接路径,


3.core
src
4.lib
common
5.db
数据库相关
6.log
日志相关
6.interface
接口方面

 
原文地址:https://www.cnblogs.com/wyf20190411-/p/11196959.html