首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >隐式函数,希望根据键执行不同的数学函数。

隐式函数,希望根据键执行不同的数学函数。
EN

Stack Overflow用户
提问于 2014-03-08 16:03:43
回答 1查看 51关注 0票数 1

标题有点奇怪,但我想不出更好的方式来形容它。我正在为3D软件开发一个插件。它将数据存储在所谓的“通道”中,而我正在开发的插件是根据一些数学关系来同步不同的“通道”。基本上是这样的:

如果用户更新频道的“质量”,我想根据公式更新“光线”和“比率”。如果他们更新“射线”或“比率”,我只想更新“质量”。我需要更新很多不同的东西,不仅仅是这些,但是为了……我会保持简单。嗯,简单。

目前,我已经有了一个字典,它是要为每个通道更新键更新的通道列表,如下所示:

代码语言:javascript
运行
复制
channel_relationships = {
"quality": ["rays", "ratio"],
"rays":    ["quality"],
"ratio":   ["quality"]
}

这是很好的工作,以了解什么正在改变。我的代码获得一个发送给它的值,通知它用户更改了哪个通道,所以我只需使用字典中的正确键访问正确的列表:

代码语言:javascript
运行
复制
channels_to_update = channel_relationships[incoming_channel]
for channel in channels_to_update:
     UpdateChannel(channel)

这一切都很好,很好。但棘手的是,所有不同的渠道相互影响,以不同的方式使用一些相当长的数学表达式。目前,我正在通过UpdateChannel函数中的if/elif语句来解决这个问题,如下所示:

代码语言:javascript
运行
复制
def UpdateChannel(channel):
    if channel == "rays":
        pass #do math here
    elif channel == "ratio":
        pass #do other math...
    elif channel == "quality"
        pass #do other math...

不是很优雅。理想情况下,我希望在字典中以隐式方式存储函数本身,如下所示:

代码语言:javascript
运行
复制
functions = {"quality": {"rays": 0.5*x**2+3.2*x+2, 
                         "ratio": 7.3*x**2+1.2*x-5}}

基本上,函数本身直接存储在字典中。请注意,我不愿实际计算字典中的所有值。我只想根据需要对它们进行评估。因此,当我访问函数“quality”时,我希望得到隐式函数,或者根据"x“计算的值。差不多吧。问题是,我不知道这在Python中是否可行,也不知道从哪里开始寻找这样的东西。我可以为每个关系显式地定义我的函数,但是我最终会得到很多函数。因为所有函数实际上只是一个基于输入浮点值的浮点值,这似乎是最优雅的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-08 16:07:10

函数是一流的对象,您可以将它们存储在字典中,检索它们,然后调用它们,没有问题。

一个lambda将从一个表达式生成一个函数:

代码语言:javascript
运行
复制
functions = {
    "quality": {
        "rays": lambda x: 0.5*x**2+3.2*x+2, 
        "ratio": lambda x: 7.3*x**2+1.2*x-5
    }
}

现在查找您的函数并调用它们:

代码语言:javascript
运行
复制
functions['quality']['rays'](input_float_value)

是的,就是这么简单。:-)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22271648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档