Python调度表字符串变量

问题描述 投票:0回答:1

我需要使用字符串来确定要运行的计算。我正在尝试使用调度表而不是Elif阶梯。我需要运行一些liner,一些多行函数,并且需要基于传入状态的一部分来运行函数。

此代码经过简化说明。前4个功能有效,但后3个功能无效。

<!-- language: python -->
Fun = functions.get(reference, lambda : print('Invalid Ref'))
fun(my_df, start, stop)

def Ripple(df, start, stop):#Some multi-line function
    temp = df.trc3_s12_db[df.index >= start, df.index <= stop]
    return temp.values.max() - temp.values.min()

def RAve(df, start, stop, ave, spacing=100):#Changing function
    return df.trc3_s12_db.rolling(ave*spacing).[df.index >= start, df.index <= stop].min()

functions = { #Dispatch Table
    'MinA': lambda df, start, stop: df[df.index >= start, df.index <= stop].tA.min() * (-1),
    'MaxA': lambda df, start, stop: df[df.index >= start, df.index <= stop].tA.max() * (-1),
    'MinB': lambda df, start, stop: df[df.index >= start, df.index <= stop].tB.min() * (-1),
    'Ripple': TXILripple,
    '5MHz Ave': RAve(ave=5),
    '2.2MHz Ave': RAve(ave=2.2),
    '%dMHz Ave': RAve(ave=%d) #Is this possible?
}

我知道我可以使用tupple传递函数和参数,但是整个表必须是tupple。我可以通过字符串格式将变量传递到调度表中吗?解决这些可能性的最佳方法是什么?

python pandas lambda dispatch
1个回答
0
投票

对于第一部分,您似乎正在尝试创建部分函数,​​该函数是由另一个函数组成,并且其中一些参数已“烧入”。

对于第二部分'%dMHz Ave': RAve(ave=%d) #Is this possible?-不,这是不可能的。您需要其他逻辑来检测这种情况,然后在这种情况下使用调度表(dict)以外的其他方法。例如。使用正则表达式检查表达式是否与"xxxMHz Ave"匹配,在这种情况下,请使用RAve(ave=xxx) m

© www.soinside.com 2019 - 2024. All rights reserved.