在一个 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 C

if 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 = True
    VIDEO_FPS = 20
    VIDEO_WIDTH = 1280
    VIDEO_HEIGHT = 720

然后在别的文件用:

from config_const import Config

Config.SAVE_VIDEO = False  # 修改也能影响全局引用
print(Config.VIDEO_FPS)

五、总结对照表

方式 优点 缺点
直接定义常量(推荐) 简洁明了,易维护 不能动态修改
类封装(Config) 可读性高,支持动态修改 稍微多写一点
JSON/YAML 文件读取 易于配置化 需要额外读取逻辑

建议在项目中专门建一个 config_const.py 来集中放置这些常数。
例如像现在的 config_p 一样,就可以把默认值放在常数文件里,这样别的模块都能引用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐