标题有点奇怪,但我想不出更好的方式来形容它。我正在为3D软件开发一个插件。它将数据存储在所谓的“通道”中,而我正在开发的插件是根据一些数学关系来同步不同的“通道”。基本上是这样的:
如果用户更新频道的“质量”,我想根据公式更新“光线”和“比率”。如果他们更新“射线”或“比率”,我只想更新“质量”。我需要更新很多不同的东西,不仅仅是这些,但是为了……我会保持简单。嗯,简单。
目前,我已经有了一个字典,它是要为每个通道更新键更新的通道列表,如下所示:
channel_relationships = {
"quality": ["rays", "ratio"],
"rays": ["quality"],
"ratio": ["quality"]
}这是很好的工作,以了解什么正在改变。我的代码获得一个发送给它的值,通知它用户更改了哪个通道,所以我只需使用字典中的正确键访问正确的列表:
channels_to_update = channel_relationships[incoming_channel]
for channel in channels_to_update:
UpdateChannel(channel)这一切都很好,很好。但棘手的是,所有不同的渠道相互影响,以不同的方式使用一些相当长的数学表达式。目前,我正在通过UpdateChannel函数中的if/elif语句来解决这个问题,如下所示:
def UpdateChannel(channel):
if channel == "rays":
pass #do math here
elif channel == "ratio":
pass #do other math...
elif channel == "quality"
pass #do other math...不是很优雅。理想情况下,我希望在字典中以隐式方式存储函数本身,如下所示:
functions = {"quality": {"rays": 0.5*x**2+3.2*x+2,
"ratio": 7.3*x**2+1.2*x-5}}基本上,函数本身直接存储在字典中。请注意,我不愿实际计算字典中的所有值。我只想根据需要对它们进行评估。因此,当我访问函数“quality”时,我希望得到隐式函数,或者根据"x“计算的值。差不多吧。问题是,我不知道这在Python中是否可行,也不知道从哪里开始寻找这样的东西。我可以为每个关系显式地定义我的函数,但是我最终会得到很多函数。因为所有函数实际上只是一个基于输入浮点值的浮点值,这似乎是最优雅的方法。
发布于 2014-03-08 16:07:10
函数是一流的对象,您可以将它们存储在字典中,检索它们,然后调用它们,没有问题。
一个lambda将从一个表达式生成一个函数:
functions = {
"quality": {
"rays": lambda x: 0.5*x**2+3.2*x+2,
"ratio": lambda x: 7.3*x**2+1.2*x-5
}
}现在查找您的函数并调用它们:
functions['quality']['rays'](input_float_value)是的,就是这么简单。:-)
https://stackoverflow.com/questions/22271648
复制相似问题