Python 文件常数引用
在一个 Python 文件里定义一些常数,比如模型路径、视频保存开关、窗口尺寸等,
然后在另一个文件里能直接引用这些常数,而不用重复写一遍。
这在工程化中非常常见
一、定义常数文件(比如 config_const.py)
可单独建一个文件,例如:
config_const.py
# config_const.py
# -------------------------
# 全局常数定义文件
# -------------------------# 视频保存相关
SAVE_VIDEO = True
VIDEO_FPS = 20
VIDEO_WIDTH = 1280
VIDEO_HEIGHT = 720# 模型路径
MODEL_PATH = "weights/lane_detect_model.engine"# 其他常量
DETECTION_THRESHOLD = 0.5
二、在其他 Python 文件中引用
比如在 run.py 想用这些常量,只需:
from config_const import SAVE_VIDEO, VIDEO_FPS, VIDEO_WIDTH, VIDEO_HEIGHT# 使用
if SAVE_VIDEO:out_writer = cv2.VideoWriter("output.mp4", cv2.VideoWriter_fourcc(*'mp4v'), VIDEO_FPS, (VIDEO_WIDTH, VIDEO_HEIGHT))
或者直接导入整个模块:
import config_const as Cif C.SAVE_VIDEO:print(f"保存视频尺寸:{C.VIDEO_WIDTH}x{C.VIDEO_HEIGHT}")
三、项目结构推荐
project/
│
├── run.py
├── postprocess_lanes.py
├── config_const.py 存放全局常量
├── utils/
│ ├── __init__.py
│ ├── video_utils.py
│ └── model_utils.py
这样所有文件都可以用:
from config_const import *
或:
import config_const as C
四、如果要让常量可以跨模块修改(例如参数调整)
可以把常量写在一个类或字典中,方便动态修改:
# config_const.py
class Config:SAVE_VIDEO = TrueVIDEO_FPS = 20VIDEO_WIDTH = 1280VIDEO_HEIGHT = 720
然后在别的文件用:
from config_const import ConfigConfig.SAVE_VIDEO = False # 修改也能影响全局引用
print(Config.VIDEO_FPS)
五、总结对照表
| 方式 | 优点 | 缺点 |
|---|---|---|
| 直接定义常量(推荐) | 简洁明了,易维护 | 不能动态修改 |
| 类封装(Config) | 可读性高,支持动态修改 | 稍微多写一点 |
| JSON/YAML 文件读取 | 易于配置化 | 需要额外读取逻辑 |
建议在项目中专门建一个 config_const.py 来集中放置这些常数。
例如像现在的 config_p 一样,就可以把默认值放在常数文件里,这样别的模块都能引用。
