设置模块中的动态条目

2024-04-29 16:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个软件包,用于导入音频文件、处理它们、打印它们等等,以供研究之用。 在管道的每个阶段,都会从设置模块中提取设置,如下所示

我希望能够更新像MODEL_NAME这样的全局设置,并在包含它的任何dict中更新它

设置.py

MODEL_NAME = 'Test1'
DAT_DIR = 'dir1/dir2/'
PROCESSING = {
    "key1":{
        "subkey2":0,
        "subkey3":1
    },
    "key2":{
        "subkey3":MODEL_NAME
    }
}

运行.py

import settings as s
wavs = import_wavs(s.DAT_DIR)
proc_wavs = proc_wavs(wavs,s.PROCESSING)

我想包含的一些设置dict MODEL_NAME,效果很好。当我想在运行时更改MODEL_NAME时,问题就出现了。所以如果我这么做了:

import settings as s
wavs = import_wavs(s.DAT_DIR)
s.MODEL_NAME='test1'
proc_wavs1 = proc_wavs(wavs,s.PROCESSING)
s.MODEL_NAME='test2'
proc_wavs2 = proc_wavs(wavs,s.PROCESSING)

但是很明显,这两个调用都将包含最初在设置文件中分配的s.PROCESSING。 更新的最好方法是什么

我想到的可能解决方案:

  • 将变量存储为可变类型,然后进行更新,例如:

    s.MODEL_NAME[0] = ["test1"]
    # do processing things
    s.MODEL_NAME[0] = ["test2"]
    
  • 将每个设置类别定义为一个函数,以便在上重新运行 每次呼叫,例如:

    MODEL_NAME = 'test1' ..
    
    def PROCESSING():
       return {
           "key1":{
               "subkey2":0,
               "subkey3":1
           },
           "key2":{
               "subkey3":MODEL_NAME
           }
       }
    

    那么

    s.MODEL_NAME='test1'
    proc_wavs1 = proc_wavs(wavs,s.PROCESSING())
    s.MODEL_NAME='test2'
    proc_wavs1 = proc_wavs(wavs,s.PROCESSING())
    

    我原以为这很管用,但很难做到 在运行时更改函数的任何条目,例如如果我想的话 更新subkey2的值并运行其他程序

其他的想法也许是一个有更新方法的类或者什么的,有人有更好的想法吗


Tags: namepyimportmodeldirprocdictdat
1条回答
网友
1楼 · 发布于 2024-04-29 16:20:00

您希望为执行波形分析的函数配置字典中结构化的常规和特定设置

首先定义一个设置类,如:

class Settings :

  data_directory = 'path/to/waves'

  def __init__(self, model):         
     self.parameters= {
       "key1":{
           "subkey1":0,
           "subkey2":0
       },
       "key2":{
           "subkey1":model
       }
     }

# create a new class based on model1
s1 = Settings('model1')
# attribute values to specific keys
s1.parameters["key1"]["subkey1"] = 3.1415926
s1.parameters["key1"]["subkey2"] = 42
# an other based on model2
s2 = Settings('model2')
s2.parameters["key1"]["subkey1"] = 360
s2.parameters["key1"]["subkey2"] = 1,618033989
# load the audio
wavs = openWaves(Settings.data_directory)
# process with the given parameters
results1 = processWaves(wavs,s1)
results2 = processWaves(wavs,s2)

相关问题 更多 >