首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免大量嵌套的if-elif-else条件语句来评估许多a情况下的快速响应?

如何避免大量嵌套的if-elif-else条件语句来评估许多a情况下的快速响应?
EN

Stack Overflow用户
提问于 2019-05-02 03:02:04
回答 2查看 220关注 0票数 1

我正在从事一个机电一体化项目,在该项目中,我访问来自多个来源的电流(Amps)数据,并且必须根据内部和之间的值变化趋势(增加/减少值和增加/减少相对差异)来计算响应(馈送到机械系统)。有许多需要访问的a条件(对每个条件的唯一或混合响应)和它们所依赖的许多a变量,所以我留下了许多嵌套的if-elif-else语句,每个语句都计算多个条件和标志,从而在数据流快速(高达85 Hz)时花费时间进行响应。

该模块是大型项目的一部分,只需使用Python即可完成。下面是我当前代码的这一部分:

代码语言:javascript
复制
def function(args):
    if flag1 and flag2 and condition1 and not condition2:
        if condition3 and not flag3:
            response += var1
            flag4 = True
        elif -- :
            response = var2
            flag3 = False
        elif -- :
            ------------
        else :
            ------------
     if not flag_n and flag_m and condition_p and condition_q and not condition_r:
        if.. elif ... else :
            flags... response changes..
     more IFs

我需要一种更好和更有效的方式来做这件事,或者是一种完全不同的方法,例如一些适合上述用途的机器学习或深度学习算法或框架。

EN

回答 2

Stack Overflow用户

发布于 2019-05-02 04:09:15

你可以使用二进制,也许:

代码语言:javascript
复制
flag_bits = {flag1: 0b0000000001, 
             flag2: 0b0000000010, 
             flag3: 0b0000000100, 
             flag4: 0b0000001000, 
             condition1: 0b0000010000,
             condition2: 0b0000100000,
             ...}

然后,当您接收到标志和条件时,按位计算它们,并有一个结果字典或基于它计算结果的方法:

代码语言:javascript
复制
def add_response(response, add_value):
    return response += add_value

def subtract_response(response, subtract_value):
    return response -= subtract_value

response_actions = {0b0000110011: ('add', var1, 0b0000001000), ...}
response_methods = {'add': add_response, 'sub': subtract_response, ...}

response_action = response_actions[0b0000110011]
response_method = response_action[0]
response = response_method(response, respnose_action[1])
flag_bits = response_action[2]

显然,它不是完全完美的,但它将消除大量的if,并将操作转换为查找,希望能节省时间。

票数 2
EN

Stack Overflow用户

发布于 2019-05-02 09:10:29

从你的问题中,我不能理解你的问题是if-else语句随着时间的推移变得越来越大和更混乱,还是它们是计算密集型的。

在任何一种情况下,任何类型的机器学习或深度学习框架都可能比你的if-else慢得多,而且更令人困惑,因为很难知道为什么-AI-深度学习-算法-做什么。如果你的机器人翻了怎么办?你永远不会知道为什么。但是,您可以跟踪if-else语句...我强烈建议不要走AI路线,如果你的if-else树不是这样的话……3000-5000行,他们每天都在改变100-200行,或者类似的东西。

软件开发人员通常会尝试遵循良好的设计原则,以避免陷入这种情况,然而,如果更改架构为时已晚,What is the best way to replace or substitute if..else if..else trees in programs? (多态性)可以为您提供帮助。

话虽如此,我在很多传感器/数学重量级项目上工作过,它们总是一样的:项目开始很好,很慢,然后是很好的改进,然后是最后期限,最后你会得到一个假使否则的意大利面。总是一样的。至少对我来说是这样。所以,我现在所做的就是每当我有改进的时候,我都会尝试把它添加到源代码中,这样一般的架构就会保持得体。

处理这个问题的另一种方法是编写流程图,就像在Matlab的Simulink中一样,并清楚地显示您对项目将如何工作/如何实际实现等的总体想法。

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

https://stackoverflow.com/questions/55941283

复制
相关文章

相似问题

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