python模块
模块循环导入问题
循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错
"""在以后的编程生涯中 尽量去避免出现循环导入的问题"""
如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好'
(一错再错的办法)
方式1:将导入模块的句式写在定义名字的下面
方式2:将导入模块的句式写在函数体代码内
方式3:改用导入包的方式,不用导入具体函数的方式
判断文件类型
py文件可以被分为两种类型
1.执行文件
2.被导入文件
有一个内置变量__name__
当__name__所在的文件是执行文件的时候 结果是__main__
当__name__所在的文件是被导入文件时候 结果是文件名(模块名)
可以借助于__name__区分被导入的代码和测试代码
if __name__ == '__main__':
当前文件是执行文件的时候才会执行的子代码块
"""
由于上述代码在很多启动脚本中经常使用 所以有简写方式
直接输入main之后按tab键即可
"""
if __name__ =='__main__':
print '>>>>>>>1'
if __name__ =="importby":
print '>>>>>>>2'
直接运行importby.py,结果如下:
>>>>>>>1
import importby
运行import.py,结果如下:
>>>>>>>2
模块查找顺序
"""
1.先从内存空间中查找
2.再从内置模块中查找
3.最后去sys.path查找(类似于我们前面学习的环境变量)
如果上述三个地方都找不到 那么直接报错!!!
"""
import md1
import time
time.sleep(15)
print(md1.name)
import time
print(time)
print(time.time())
"""在创建py文件时候一定不要跟模块名(内置、第三方)冲突!!!"""
import sys
print(sys.path)
'当内存中和内置中都没有要查找的模块时 就会去下面的路径中挨个查找'
['E:\\PyCharm 2021.2.3\\jbr\\bin\\E\\PycharmProjects\\pythonProject2', 'E:\\PyCharm 2021.2.3\\jbr\\bin\\E\\PycharmProjects\\pythonProject2', 'E:\\PyCharm 2021.2.3\\plugins\\python\\helpers\\pycharm_display',
...
]
sys.path中虽然有很多路径 但是只需要重点关注第一个
第一个其实就是执行文件所在的路径
查找模块的时候只需要站在执行文件所在的路径查看即可
import sys
sys.path.append()
import mddd
print(mddd.name)
"""
pycharm会自动将项目目录所在的路径添加到sys.path中
"""
from aaa import mddd
print(mddd.name)
from aaa.bbb.ccc import mm
print(mm.name)
绝对导入与相当导入
绝对导入的格式为 import A.B 或 from A import B,
相对导入格式为 from . import B 或 from ..A import B,
.代表当前模块,..代表上层模块,...代表上上层模块,依次类推。
永远按照执行文件所在的路径一层层往下查找(无脑查找即可)
相对导入可以避免硬编码带来的维护问题,例如我们改了某一顶层包的名,那么其子包所有的导入就都不能用了。但是存在相对导入语句的模块,不能直接运行,否则会有异常:
如果是绝对导入,一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模,
如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块所以,如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径,所以如果直接运行python xx.py ,而xx.py有相对导入就会报错
import sys, os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
import sys, os
from . import models
from ..proj import settings
"""
绝对导入必须依据执行文件所在的文件夹路径为准
绝对导入无论在执行文件中还是被导入文件都适用
相对导入
.代表的当前路径
..代表的上一级路径
...代表的是上上一级路径
相对导入不能再执行文件中使用
相对导入只能在被导入的模块中使用,使用相对导入 就不需要考虑
执行文件到底是谁 只需要知道模块与模块之间路径关系
"""
包
包就是内部含有__init__.py的文件夹
包就是多个模块的结合体(内部存放了多个模块文件)
eg:我们的电脑某个文件夹下面有很多不同类型的文件
视频文件、音频文件、文本文件、图片文件
为了方便管理我们会习惯性的创建不同的文件夹分类管理
1.创建一个文件夹,该文件夹的名字就是该包的包名
2在该文件夹内添加一个 __init__.py 文件即可
import fk_package
import fk_package.print_shape
from fk_package import billing
import fk_package.arithmetic_chart
软件开发目录规范
这些文件夹和文件其实都有各自存在的意义和主要功能
"""
课下可以看看自己电脑上下载过的软件所在的位置
查看文件名称很多时候可以找到相同文件名的文件
"""
1.bin文件夹
存放程序的启动文件 start.py
2.conf文件夹
存放程序的配置文件 settings.py
3.core文件夹
存放程序的核心业务 src.py
就是最为重要的代码 能够实现具体需求
4.lib文件夹
存放程序公共的功能 common.py
5.db文件夹
存放程序的数据 userinfo.txt
6.log文件夹
存放程序的日志记录 log.log
7.readme文本文件
存放程序的说明、广告等额外的信息
8.requirements.txt文本文件
存放程序需要使用的第三方模块及对应的版本
ps:目录的名字可以不一致 但是主要的思想是一致的
就是为了便于管理 解耦合...
拿到启动文件之后直接运行即可 无需考虑程序内部的复杂程度 便于管理

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统