我需要使用字符串来确定要运行的计算。我正在尝试使用调度表而不是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。我可以通过字符串格式将变量传递到调度表中吗?解决这些可能性的最佳方法是什么?
对于第一部分,您似乎正在尝试创建部分函数,该函数是由另一个函数组成,并且其中一些参数已“烧入”。
对于第二部分'%dMHz Ave': RAve(ave=%d) #Is this possible?
-不,这是不可能的。您需要其他逻辑来检测这种情况,然后在这种情况下使用调度表(dict)以外的其他方法。例如。使用正则表达式检查表达式是否与"xxxMHz Ave"
匹配,在这种情况下,请使用RAve(ave=xxx)
m