Python - запуск определенной функции в зависимости от переменной - PullRequest
2 голосов
/ 25 октября 2019

Допустим, у меня есть main.py и 26 дополнительных файлов Python с именами от A.py до Z.py.
Все 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 функций, но и более ста.
Я слышал, что если..elif..elifболее эффективный, чем switch var:. Однако есть ли способ, которым я мог бы просто запустить functionvar() в зависимости от переменной, не перебирая все из них по очереди? Если нет, то если ... элиф ... элиф ... еще самый эффективный способ?

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Если вам нужно придерживаться этой структуры, вы можете использовать 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()
1 голос
/ 25 октября 2019

Вы можете использовать:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...