【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.pswp.cn/pingmian/71843.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71843.shtml
英文地址,請注明出處:http://en.pswp.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…