设置模块中的动态条目
Dynamic entries in a settings module
我正在编写一个包,用于导入音频文件、处理它们、绘制它们等,用于研究目的。
在管道的每个阶段,设置都是从设置模块中提取的,如下所示。
我希望能够像 MODEL_NAME
一样更新全局设置,并在任何包含它的字典中进行更新。
settings.py
MODEL_NAME = 'Test1'
DAT_DIR = 'dir1/dir2/'
PROCESSING = {
"key1":{
"subkey2":0,
"subkey3":1
},
"key2":{
"subkey3":MODEL_NAME
}
}
run.py
import settings as s
wavs = import_wavs(s.DAT_DIR)
proc_wavs = proc_wavs(wavs,s.PROCESSING)
一些我想包含的设置命令 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
都将包含最初在设置文件中分配的 MODEL_NAME
。
让它更新的最佳方式是什么?
我想到的可能的解决方案:
将变量存储为可变类型,然后更新它,例如:
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 的值和 运行 其他值。
其他想法可能是 class 更新方法之类的,有没有人有更好的想法?
您想为执行波浪分析的函数配置在字典中构造的通用和特定设置。
首先定义一个设置 class,例如:
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)
我正在编写一个包,用于导入音频文件、处理它们、绘制它们等,用于研究目的。 在管道的每个阶段,设置都是从设置模块中提取的,如下所示。
我希望能够像 MODEL_NAME
一样更新全局设置,并在任何包含它的字典中进行更新。
settings.py
MODEL_NAME = 'Test1'
DAT_DIR = 'dir1/dir2/'
PROCESSING = {
"key1":{
"subkey2":0,
"subkey3":1
},
"key2":{
"subkey3":MODEL_NAME
}
}
run.py
import settings as s
wavs = import_wavs(s.DAT_DIR)
proc_wavs = proc_wavs(wavs,s.PROCESSING)
一些我想包含的设置命令 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
都将包含最初在设置文件中分配的 MODEL_NAME
。
让它更新的最佳方式是什么?
我想到的可能的解决方案:
将变量存储为可变类型,然后更新它,例如:
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 的值和 运行 其他值。
其他想法可能是 class 更新方法之类的,有没有人有更好的想法?
您想为执行波浪分析的函数配置在字典中构造的通用和特定设置。
首先定义一个设置 class,例如:
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)