模块补充和软件开发目录规范
目录
模块补充
循环导入
循环导入就是两个文件彼互相导入。循环导入的时候极有可能发现某个名字还没有被创建就使用的情况,引发报错导致程序终止。在实际编程中,尽量避免循环导入。
如果确实需要循环导入,那么需确保双方使用的名字都必须在导入前定义
方式1:先定义名字,再导入模块
方式2:将导入模块的句式写在函数体代码内

判断文件类型
py文件可以被分为两种类型
- 执行文件
- 被导入文件
内置变量__name__
当__name__所在的文件是执行文件的时候,结果是__main__
当__name__所在的文件是被导入文件时候,结果是模块名
# 创建一个md001.py文件
x = 88888
if __name__ == '__main__':
print('loaded md001')
else:
print('from md001')
# 创建一个执行文件导入md001.py文件
import md001
if __name__ == '__main__':
print(md001.x)

模块的查找顺序
- 先从内存空间中查找
- 再去内置模块中查找
- 最后到sys.path查找
# 验证先从内存空间中查找
import md001
import time
time.sleep(10) # 睡眠期间将md0011.py文件删除
print(md001.x)
# 验证从内置模块中查找
# 创建一个time.py文件
def func():
print('this is self-defined time module')
func()
# 创建一个执行文件导入time.py文件
import time
print(time)
print(time.time())
# 验证到sys.path中查找
import sys
print(sys.path) # 结果是一个列表,里面的元素是一个个路径
sys.path.insert(0, r'D:\PyCharm 2021\week4\day18\pkg') # 主动添加sys.path路径
print(sys.path)
import md001
绝对导入和相对导入
绝对导入
# 创建一个md002.py文件
smile = '^^^o^^^'
if __name__ == 'qqq.www.eee.md002':
print('from md002')
else:
print('loaded md002')
# 创建一个执行文件导入md002.py文件
from qqq.www.eee import md002
print(md002.smile)
相对导入
# 创建一个md003.py文件
smile = '---o---'
if __name__ != '__main__':
print('from md003')
else:
print('loaded md003')
from . import md002
print(md002.smile)
from qqq.www.eee import md003
# 创建一个执行文件导入md003.py文件
print(md003.smile)
包

什么是包?
包就是内部含有__init__.py的文件夹
__init__方法使用
# 在pkg文件夹(与执行文件路径一致)里创建一个md001.py文件
x = 88888
if __name__ == 'md001':
print('from md001')
# 在__init__.py中添加代码
from . import md001
# 创建一个执行文件导入pkg(包)
import pkg
print(pkg.md001.x)
软件开发目录规范
一、bin文件夹
存放程序的启动文件,例如start.py
二、conf文件夹
存放程序的配置文件,例如settings.py
三、 core文件夹
存放程序的核心业务,例如src.py
就是最为重要的代码 能够实现具体需求
四、 lib文件夹
存放程序公共的功能,例如common.py
五、 db文件夹
存放程序的数据,例如userinfo.txt,admininfo.txt
六、 log文件夹
存放程序的日志记录,例如log.log
七、 readme文本文件
存放程序的说明、广告等额外的信息
八、 requirements.txt文本文件
存放程序需要使用的第三方模块及对应的版本

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?