【Python】omegaconf 用法详解

OmegaConf:从基础到进阶


1. OmegaConf 简介

OmegaConf 是 hydra 背后的核心配置库,提供比 argparsejson.load 更灵活的配置管理能力。其主要特性包括:

安装 OmegaConf:

pip install omegaconf

2. 基本操作

2.1 创建 OmegaConf 配置

OmegaConf 提供两种主要的数据结构:

  • DictConfig(字典格式)
  • ListConfig(列表格式)
2.1.1 从字典创建配置
from omegaconf import OmegaConfconfig = OmegaConf.create({"name": "Alice","age": 25,"skills": ["Python", "Machine Learning"],"details": {"location": "USA","experience": 5}
})print(config.name)  # Alice
print(config.details.location)  # USA
2.1.2 从 YAML 字符串创建配置
yaml_config = """
name: Bob
age: 30
skills:- Java- DevOps
details:location: Canadaexperience: 8
"""config = OmegaConf.create(yaml_config)
print(config.skills[1])  # DevOps
2.1.3 读取YAML文件配置
from omegaconf import OmegaConf
config = OmegaConf.load("config.yaml")
2.1.4 读取 JSON 配置
json_config = '{"name": "Charlie", "age": 28, "skills": ["Go", "Docker"]}'
config = OmegaConf.create(json_config)
print(config.skills)  # ['Go', 'Docker']
2.1.5 保存YAML文件
OmegaConf.save(config, "config.yaml")

3. 访问和修改配置

3.1 访问配置值

OmegaConf 允许使用 点运算符字典索引 访问值:

print(config.name)  # Charlie
print(config["age"])  # 28

3.2 修改配置值

config.name = "Dave"
config["age"] = 35
print(config.name)  # Dave

3.3 添加新键值

config.country = "Germany"
config["city"] = "Berlin"
print(config)  # {'name': 'Dave', 'age': 35, 'skills': ['Go', 'Docker'], 'country': 'Germany', 'city': 'Berlin'}

4. 变量插值(Interpolation)

OmegaConf 支持变量插值,即使用 ${} 访问配置中的其他值。

yaml_with_interpolation = """
name: Eve
greeting: "Hello, ${name}!"
"""config = OmegaConf.create(yaml_with_interpolation)
print(config.greeting)  # Hello, Eve!

数学计算插值:

yaml_math = """
a: 10
b: 5
sum: ${a} + ${b}
"""config = OmegaConf.create(yaml_math)
print(config.sum)  # 15

5. 配置合并(Merge)

OmegaConf 允许合并多个配置文件,例如默认配置用户自定义配置

default_config = OmegaConf.create({"learning_rate": 0.01, "batch_size": 32})
user_config = OmegaConf.create({"batch_size": 64, "epochs": 10})merged_config = OmegaConf.merge(default_config, user_config)
print(merged_config)  # {'learning_rate': 0.01, 'batch_size': 64, 'epochs': 10}

6. 结构化配置(Typed Config)

6.1 定义数据类并加载配置

OmegaConf 支持 Python dataclass,使配置更加结构化

from dataclasses import dataclass
from omegaconf import OmegaConf@dataclass
class ModelConfig:learning_rate: float = 0.01batch_size: int = 32config = OmegaConf.structured(ModelConfig)
print(config.learning_rate)  # 0.01

6.2 合并结构化配置

@dataclass
class TrainingConfig:model: ModelConfigepochs: int = 10default_cfg = OmegaConf.structured(TrainingConfig)
user_cfg = OmegaConf.create({"model": {"batch_size": 64}, "epochs": 20})merged_cfg = OmegaConf.merge(default_cfg, user_cfg)
print(merged_cfg)  # {'model': {'learning_rate': 0.01, 'batch_size': 64}, 'epochs': 20}

7. 进阶操作

7.1 保护只读配置

cfg = OmegaConf.create({"param": 42})
OmegaConf.set_readonly(cfg, True)# 下面的操作会报错
# cfg.param = 100

7.2 使用环境变量

OmegaConf 可以解析环境变量:

import os
os.environ["DB_HOST"] = "localhost"yaml_env = """
database:host: ${oc.env:DB_HOST}
"""config = OmegaConf.create(yaml_env)
print(config.database.host)  # localhost

7.3 递归解析(resolve)

OmegaConf 默认不会解析变量插值,需手动启用:

cfg = OmegaConf.create({"a": 10, "b": "${a} + 5"})
print(cfg.b)  # ${a} + 5cfg_resolved = OmegaConf.to_container(cfg, resolve=True)
print(cfg_resolved["b"])  # 15

8. OmegaConf vs. 其他配置管理工具

特性OmegaConfargparsejsonYAML
支持嵌套
变量插值
类型安全
合并配置
结构化支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Windows 10 启用卓越性能模式及不同电源计划对比

在使用 powercfg -duplicatescheme 命令启用 “卓越性能模式”(即 Ultimate Performance 模式)之前,有几个前提条件需要注意: 前提条件: 系统版本要求:卓越性能模式 仅在 Windows 10 专业版 或更高版本&a…

请谈谈 HTTP 中的安全策略,如何防范常见的Web攻击(如XSS、CSRF)?

一、Web安全核心防御机制 (一)XSS攻击防御(跨站脚本攻击) 1. 原理与分类 ​存储型XSS:恶意脚本被持久化存储在服务端(如数据库)​反射型XSS:脚本通过URL参数或表单提交触发执行​…

三、0-1搭建springboot+vue3前后端分离-idea新建springboot项目

一、ideal新建项目1 ideal新建项目2 至此父项目就创建好了,下面创建多模块: 填好之后点击create 不删了,直接改包名,看自己喜欢 修改包名和启动类名: 打开ServiceApplication启动类,修改如下: …

从0到1入门RabbitMQ

一、同步调用 优势:时效性强,等待到结果后才返回 缺点: 拓展性差性能下降级联失败问题 二、异步调用 优势: 耦合度低,拓展性强异步调用,无需等待,性能好故障隔离,下游服务故障不影响…

二维码识别OCR接口:开启高效信息提取的新篇章

前言 在数字化时代,二维码作为一种高效的信息传递工具,已经广泛应用于各个领域。而二维码识别OCR接口的出现,更是为企业和开发者提供了一种快速、准确地提取信息的解决方案。 技术原理:图像识别与数据解析的完美结合 二维码识别…

ThinkPHP框架

在电脑C磁盘中安装composer 命令 在电脑的D盘中创建cd文件夹 切换磁盘 创建tp框架 创建一个aa的网站,更换路径到上一步下载的tp框架路径 在管理中修改路径 下载压缩包public和view 将前面代码中的public和view文件替换 在PHPStom 中打开文件 运行指定路径 修改demo…

Matlab:矩阵运算篇——矩阵数学运算

目录 1.矩阵的加法运算 实例——验证加法法则 实例——矩阵求和 实例——矩阵求差 2.矩阵的乘法运算 1.数乘运算 2.乘运算 3.点乘运算 实例——矩阵乘法运算 3.矩阵的除法运算 1.左除运算 实例——验证矩阵的除法 2.右除运算 实例——矩阵的除法 ヾ( ̄…

快速从C过度C++(一):namespace,C++的输入和输出,缺省参数,函数重载

📝前言: 本文章适合有一定C语言编程基础的读者浏览,主要介绍从C语言到C过度,我们首先要掌握的一些基础知识,以便于我们快速进入C的学习,为后面的学习打下基础。 这篇文章的主要内容有: 1&#x…

C语言 进阶指针学习笔记

文章目录 字符指针指针数组数组指针数组名数组传参 函数指针函数指针数组指向函数指针数组的指针 回调函数Qsort 的使用通过冒泡排序模拟实现 qsort 大部分的内容都写在代码注释中 指针有类型,指针的类型决定了指针的整数的步长,指针解引用操作的时候的权…

李沐《动手学深度学习》——14.9. 用于预训练BERT的数据集——wiki数据集问题以及存在的其他问题

问题1:出现"file is not a zip file" 原因是链接已经失效。 解决方法:打开下面链接自行下载,需要魔法。下载完解压到特定位置。 下载链接:项目首页 - Wikitext-2-v1数据包下载:Wikitext-2-v1 数据包下载本仓库提供了一…

【芯片验证】verificationguide上的36道UVM面试题

跟上一篇一样,verificationguide上的36到UVM面试题,通义回答ds判卷。 1. What is uvm_transaction, uvm_seq_item, uvm_object, uvm_component? uvm_transaction、uvm_seq_item、uvm_object、uvm_component是什么? uvm_transaction是UVM中所有事务的基础类,用于表示仿真…

Python 动态规划(DP)套路总结

Python 动态规划(DP)套路总结 在解决算法问题时,动态规划(DP) 是一种非常常见的优化技巧,它可以通过保存子问题的结果来避免重复计算,从而减少时间复杂度。Python 提供了非常方便的语法特性&am…

ESP32驱动OV3660摄像头实现yoloV5物体分类(摄像头支持红外夜视、边缘AI计算)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 ESP32-S3 AI智能摄像头模块是一款专为智能家居和物联网应用打造的高性能边缘AI开发模组。它集成了摄像头、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化AI推理。 凭借TensorFlow Lite、YOLO和O…

RReadWriteLock读写锁应用场景

背景 操作涉及一批数据,如订单,可能存在多个场景下操作,先使用读锁,从redis缓存中获取操作中数据 比如 关闭账单, 发起调账, 线下结算, 合并支付 先判断当前操作的数据,是否在…

网络安全高级软件编程技术 网络安全 软件开发

安全软件开发入门 软件安全问题 有趣的《黑客帝国》终极解释: 《黑客帝国》故事里面的人物关系,就像电脑里面的各种程序的关系一样: 电脑里面的系统程序:Matrix; 病毒程序:以Neo为首的人类; 防病…

苹果商店上架流程,app上架发布流程

苹果商店地址 https://appstoreconnect.apple.com/login 其他地址:开发 - Apple Developer 1.更新代码 将项目的代码更新到最新,更新成功后右下角会给出提示 2.打开模拟器 鼠标右键可以选择设备(Device) 3.测试运行 如下图可以看到已经识别到设备了,点击运行即可,运行到模…

正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介

前言: 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …

Better-SQLite3 参数绑定详解

Better-SQLite3 参数绑定详解 在使用 better-sqlite3 进行数据库操作时,参数绑定是一个非常重要的概念。它不仅提高了代码的可读性和安全性,还能有效防止 SQL 注入攻击。本文将详细介绍如何在 better-sqlite3 中使用匿名参数和命名参数,并展…

C++编程:进阶阶段—4.1封装

C面向对象的三大特性:封装、继承、多态 具有相同性质的对象,抽象为类 4.1 封装 封装的意义:将属性和行为作为一个整体,表现生活中的事物,并将属性和行为加以权限控制。 4.1.1 类的定义及实例化对象 语法&#xff…