Python基础篇---模块补充,包和开发目录规范
本质内容
• 循环导入问题
• 判断文件类型
• 模块的查找顺序
• 绝对导入和相对导入
• 包
• 软件开发目录规范
循环导入问题
循环导入就是两个文件彼此导入彼此,循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错。
如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好',如果实在没有办法我们可以采用下面两种方法。
1 2 | 方式1:将导入模块的句式写在定义名字的下面 方式2:将导入模块的句式写在函数体代码内 |
py文件是可以分为两种类型的,一种是被我们右键运行的执行文件,还有一种是被我们当模块导入的被导入文件。
我们可以通过内置变量__name__去判断:
1 2 | 当__name__所在的文件是执行文件的时候 结果是__main__ 当__name__所在的文件是被导入文件时候 结果是文件名(模块名) |
这个有什么用呢?我们可以借助__name__区分被导入的代码和测试代码。
1 2 3 | if __name__ == '__main__' : 当前文件是执行文件的时候才会执行的子代码块 快捷键:直接输入main之后按tab键即可 |
模块的查找顺序
名称空间有查找顺序,模块也是有查找顺序的。
1 2 3 4 | 先从内存空间中查找 再从内置模块中查找 最后去sys.path查找(类似于我们前面学习的环境变量) 述三个地方都找不到 那么直接报错!!! |
1.验证先从内存空间中查找
1 2 3 4 | import md import time time.sleep(15) # 睡眠期间将md文件删除,还是能耐输出name的内容 print(md.name) |
2.验证再从内置模块中查找:
1 2 3 4 5 | 在项目文件的目录下创建一个time.py和time1.py import time1 import time print(time1) # <module 'time1' from 'E:\\pythonProject\\pythonProject1\\time1.py' > print(time) # <module 'time' (built- in )> 可以看出是从内置模块中找的time |
ps:在创建py文件时候一定不要跟模块名(内置、第三方)冲突!!!
3.验证sys.path(类似于我们前面学习的环境变量)
1 2 3 | import sys print(sys.path) # 结果是一个列表 里面存放了很多路径 sys.path中虽然有很多路径 但是只需要重点关注第一个,第一个其实就是执行文件所在的路径 |
那我们如何解决这些方法也找不到的哪些模块呢?
方法1.主动添加sys.path路径(类似于添加环境变量)
1 2 3 4 | import sys sys.path.append(r 'E:\pythonProject\pythonProject1\aaa' ) import md print(md.name) # 输出tomf |
方法2:利用from...import...句式指名道姓的查找
1 2 3 4 | from aaa import md print(md.name) # 输出tom from aaa.bbb.ccc import mm # 通过点的方式进入下一层目录 print(mm.name) # 输出jason |
在导入模块的时候一切查找模块的句式都是以执行文件为准,无论导入的句式是在执行文件中还是在被导入文件中!!!
绝对导入
1 2 | 永远按照执行文件所在的路径一层层往下查找(无脑查找即可) eg: import a.b.c import md |
相对导入
1 2 3 4 5 6 | 当前模块所在的路径然后使用特殊符号.去查找其他模块即可 相对导入只能在被导入文件中使用 不能在执行文件中使用 .表示当前路径 ..表示上一层路径 ...表示上上一层路径 eg: from .. import amd |
包
从专业的角度来解释的话包就是内部含有__init__.py的文件夹。
从实际的角度来解释的话包就是多个模块的结合体(内部存放了多个模块文件)。
包的导入使用。
1 2 3 4 5 6 | 在导入包的时候 索要名字其实是跟包里面的__init__.py要。 方法1: 在__init__提前导入包里的所有模块,就可以直接通过包的名字使用模块了。 方法2: 直接忽略__init__的存在使用绝对导入即可,不需要考虑包的存在直接当成普通文件夹即可 |
我们在开发写代码的时候,不同功能的代码要放在不同的文件夹中,用于区分功能模块。
1.bin文件夹
1 | 存放程序的启动文件 start.py |
2.conf文件夹
1 | 存放程序的配置文件 settings.py |
3.core文件夹
1 | 存放程序的核心业务,实现具体需求 src.py |
4.lib文件夹
1 | 存放程序公共的功能 common.py |
5.db文件夹
1 | 存放程序的数据 userinfo.txt |
6.log文件夹
1 | 存放程序的日志记录 log.log |
7.readme文本文件
1 | 放程序的说明、广告等额外的信息 |
8.requirements.txt文本文件
1 | 存放程序需要使用的第三方模块及对应的版本 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?