【问题标题】:Python - firing a specific function depending on a variablePython - 根据变量触发特定函数
【发布时间】:2019-10-25 09:22:07
【问题描述】:

假设我有一个 main.py 和 26 个名为 A.py 到 Z.py 的附加 Python 文件。
这 26 个文件都包含一个名为 functionA(),functionB()...functionZ() 的函数 我有一个变量,我们称它为“var”,并想根据变量触发正确的函数。 现在我的 main.py 代码如下所示:

from A import functionA
from B import functionB
.
.
.
from Z import functionZ

var = "N";

if var == "A":
  functionA()
elif var == "B":
  functionB()
.
.
.
elif var == "Z":
 functionZ()

但是,实际代码不会只有 26 个函数,而是超过 100 个。
我听说 if..elif..elif 比 switch var: 更高效。 但是,有什么办法我可以根据变量触发functionvar(),而无需一一遍历所有变量?如果不是,如果...elif...elif...else 是最有效的方法吗?

【问题讨论】:

标签: python performance conditional-statements


【解决方案1】:

如果你必须遵守这个结构,你可以使用importlib。它不是很透明,但是在少量的行中就可以实现您想要的,并且不需要文件顶部的所有导入。

import importlib

var = 'A'

module = importlib.import_module(var)  # imports module A

f_name = f"function{var}"  # = 'functionA'

f_to_call = getattr(module, f_name)  # the function as a callable

result = f_to_call()  # calls A.functionA()

【讨论】:

  • 这似乎是一个很好的解决方案,因为它也减少了导入,谢谢!如果我想将一些参数传递给函数,我会在哪里这样做?会是result = f_to_call(param1, param2)吗?
  • 没错。该函数与在其各自模块中定义的完全一样,因此可以根据需要传递args。
  • 完美,谢谢!最后一个问题:如果我在文件夹 Folder/A.py 等中有所有附加文件,如何正确调用 import_module() 函数?我环顾四周,发现importlib.import_module(var , 'Folder') 之类的东西有或没有's。但似乎都不起作用
  • importlib.import_module 采用您可以实际引用模块的格式获取单个字符串。所以如果你像from Folder import A一样导入,你会使用importlib.import_module(f"Folder.{var}")作为f"Folder.{var}" == Folder.A
【解决方案2】:

你可以使用:

locals()['function'+var]()

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2017-01-19
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多