根据变量调用两个不同的函数

时间:2021-03-28 16:32:45

标签: python

我有两个不同的函数 cd_0cd_90,它们返回一个浮点变量。我正在使用 curve_fit 函数,我在其中调用这些函数之一。我想使用可以是 0 或 90 的 var 值 (cd_<var>) 调用这些函数中的任何一个。var 值在程序开始时已知,并且不得到修改。在这种情况下,我不想引入 if 检查,因为它会减慢调用这两个函数中的任何一个的优化函数的速度。如何实现这一目标?

3 个答案:

答案 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)

您可以尝试多种方法,我将列出一些最适合您的方法并选择适合您的方法。

  1. 使用 python 的 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

  1. 在 if 语句中使用指向函数的指针。

90

then now func = cd_90 if var else cd_0 现在代替了 funccd_90

我建议使用第二种解决方案,因为出于安全考虑,您不想使用 cd_0 调用函数。

  1. 将函数分配给 eval 对象的值,请参阅 this 答案。
相关问题