我有两个不同的函数 cd_0
和 cd_90
,它们返回一个浮点变量。我正在使用 curve_fit
函数,我在其中调用这些函数之一。我想使用可以是 0 或 90 的 var
值 (cd_<var>
) 调用这些函数中的任何一个。var
值在程序开始时已知,并且不得到修改。在这种情况下,我不想引入 if
检查,因为它会减慢调用这两个函数中的任何一个的优化函数的速度。如何实现这一目标?
答案 0 :(得分:2)
cd_func = cd_0 if var == 0 else cd_90
稍后,当您要调用所选函数时:
my_float = cd_func()
请注意,字典也可以解决问题,但您仍然要检查每个引用。它比您原来的 if
快,但比 cd_func
的直接引用慢。
答案 1 :(得分:1)
虽然不太优雅,但实际上您可以使用字典来实现这一点。
methods = {'cd_0': cd_0, 'cd_90', cd_90}
method_name = f'cd_{var}' # use f-strings since you know var
# to call
methods[method_name]()
答案 2 :(得分:1)
您可以尝试多种方法,我将列出一些最适合您的方法并选择适合您的方法。
dependencies:
path_provider:
path: 1.8.0
dependency_overrides:
sqflite: 2.0.0-nullsafety.2
函数。Python 的 eval
将运行 eval
作为 Python 语法。例子:
string
如果 eval("cd_{}({})".format(val, param))
是 cd_90(param)
,它将转换为运行 var
。
90
then now func = cd_90 if var else cd_0
现在代替了 func
或 cd_90
我建议使用第二种解决方案,因为出于安全考虑,您不想使用 cd_0
调用函数。
eval
对象的值,请参阅 this 答案。