模块及软件开发目录规范
目录:
模块
import
from ... import ...
循环导入/相对导入/绝对导入
软件开发目录规范
1.模块
概念:一系列功能的结合体
来源:1.内置的(python解释器自带的)
2.第三方(别人写的)
3.自定义的(自己写的)
表现形式:1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)
2.已被编译为共享库或DLL的C或C++扩展
3.把一系列模块组织到一起的文件夹
4.使用C编写并连接到python解释器的内置模块
模块使用:1.提高开发效率(用别人写好的)
2.将公共模块写到一个py文件中,可以随时调用(自己写的)
3.在模块使用过程中,一定要区分执行文件和导入文件
2.import
'''
import md # 在一个py文件中导入一个模块
右键运行py文件 >>> 创建一个此文件的名称空间 >>> 导入模块 >>> 执行模块内的文件 >>> 运行模块文件内的代码 >> > 创建一个包括有模块内所有变量的md.py名称空间 >>> 执行文件中产生一个指向名称空间的名字(md)
多次导入同一个模块文件,不会再执行模块文件,会沿用第一次导入的成果
'''
使用import导入模块,访问模块名称空间中的名字标准: 模块名.名字
(指名道姓的访问模块中的名字,永远不会与执行文件中的名字冲突)
import os,time,md # 不推荐使用一次性导入多个模块 # 推荐使用分次导入,如下: import os import time import md # 只有当几个模块有相同部分或者同属于一个模块,可以一次性导入多个 # 通常导入模块的语句写在文件的开头 # 当模块名字比较复杂,可以给模块取别名,如: import mddddddddddd as md
3.from ... import ...
可以指定文件导入模块,但是具有个缺点:访问模块中的名字不需要加模块名前缀 >>> 导致模块中的名字会与执行文件中的名字冲突
'''
补充:
from md import * # 一次性将md模块中的名字全部加载过来 (不推荐使用,因为不知道到底哪些名字可以用;名字过多的话导致内存溢出)
__all__ # 可以指定所在文件被当作模块导入的时候,限制导入时被导入名字的个数。如 __all__ = ['money','read'] 表明在被导入时,只能取money和read两个名字
'''
4.循环导入/相对导入/绝对导入
循环导入:
是不可取的方法,如出现循环导入,那么一定是程序设计不合理,在设计阶段应该避免
解决循环导入的方法:
1.将循环导入的句式写在文件最下方
2.函数内导入模块
绝对导入:
依据执行文件所在的文件夹路径为准
(在执行文件和导入文件中都适用)
相对导入:
.代表当前路径 # 一个点
..代表上一级路径 # 两个点
...代表上上一级路径 # 三个点
(只能在导入的模块文件中使用;只需要知道模块与模块之间路径关系 )
模块的查找顺序:首先从内存中找 >>> 然后在内置中找 >>> 最后在sys.path中找(环境变量)
注:大列表里面放有一堆文件路径,第一个路径永远是执行文件所在的文件夹
py文件名不应该与模块名冲突,包括内置的和第三方的
''' __name__: 当文件被当作执行文件执行的时候, __name__ 打印的结果是 __main__ 当文件被当作模块导入的时候, __name__ 打印的结果是模块名(没有后缀) 因此可以设立一个条件: if __name__ == '__main__': # 快捷写法: main直接tab键即可 执行下面的代码 '''
软件开发目录规范
文件名: bin文件 # 存放程序的启动文件 | _ _ _ _子文件一般有start.py或者run.py文件 | conf文件 # 存放配置相关的文件 | _ _ _ _子文件一般有settings.py文件 | core文件 # 存放业务核心逻辑代码 | _ _ _ _子文件一般有src.py文件 | db文件 # 存储数据的文件 | _ _ _ _子文件一般有db.txt文件 | lib文件 # 存放一些公共的、共享的文件 | _ _ _ _子文件一般有commen.py文件 | log文件 # 存放一些日志,如浏览记录等 | _ _ _ _子文件一般有log.log文件 | Readme文本文档 # 项目说明文件
**********************************
启动文件bin固定代码:
import sys
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
from core import src
if __name__ == '__main__':
src.run()
*************************************
PS:pycharm会自动将你新建的最顶层的目录自动添加到环境变量中!!!