Home > Enterprise >  Execute a function through the name that is stored in an object
Execute a function through the name that is stored in an object

Time:02-19

I wanted to try to optimize the code but my idea is not working.

I will receive a value from the user, this value will be a number, this number I will choose a function to be executed. So I created an object with those same numbers and the value the name of the function that should be called. I tried a few ways here but none worked, does anyone know how to do this? code right away

def funcaoSerExecutada():
  modules = {
    1: "funcao1()",
    2: "funcao2",
    3: "funcao3",
    4: "funcao4",
    5: "funcao5",
  }
  userValue = 0



  # Texto que será exebido na tela
  print("===============================")
  print("Escolha o módulo")
  print("===============================")
  print("1 - Estrutura: modelo_cantacom_vitrine_destinos_mod019_V3")
  print("2 - Estrutura: cantacom_n_mod072_aereas_100_V2;")
  print("3 - Estrutura: canta_destinos_vitrine_novo_modelo_estrutura;")
  print("4 - Estrutura: canta_mod050_estrutura; Obs: Valores apenas para Clube Smiles")
  print("5 - CANTACOM_100MILHAS-SMILESANDMONEY-VERTICAL_V1")
  print("===============================")
  


  # Pedir para o usuário digitar um valor, verificar se é um número e se essa opção digitada existe
  while (isinstance(userValue, str) or not userValue in modules):
    try:
      userValue = int(input("Digite um número: "))

      if(not userValue in modules):
        print("===============================")
        print("Essa opção não existe! Escolha uma das opções acima!")
        print("===============================")
    except:
      print("===============================")
      print("Ops, digite um número!")
      print("===============================")



  def funcao1():
    print("oi")

  def runFunction():
    modules[userValue]
  runFunction()

CodePudding user response:

Based on the answers, I made my solution

You can leave the function name without the quotes, but the variable has to be declared after it. So what I did was I took that value and put the parentheses.

def funcaoSerExecutada():
  # Funcões
  def funcao1():
    print("oi")


  
  userValue = 0
  modules = {
    1: funcao1,
  }



  # Texto que será exebido na tela
  print("===============================")
  print("Escolha o módulo")
  print("===============================")
  print("1 - Estrutura: modelo_cantacom_vitrine_destinos_mod019_V3")
  print("2 - Estrutura: cantacom_n_mod072_aereas_100_V2;")
  print("3 - Estrutura: canta_destinos_vitrine_novo_modelo_estrutura;")
  print("4 - Estrutura: canta_mod050_estrutura; Obs: Valores apenas para Clube Smiles")
  print("5 - CANTACOM_100MILHAS-SMILESANDMONEY-VERTICAL_V1")
  print("===============================")
  


  # Pedir para o usuário digitar um valor, verificar se é um número e se essa opção digitada existe
  while (isinstance(userValue, str) or not userValue in modules):
    try:
      userValue = int(input("Digite um número: "))

      if(not userValue in modules):
        print("===============================")
        print("Essa opção não existe! Escolha uma das opções acima!")
        print("===============================")
    except:
      print("===============================")
      print("Ops, digite um número!")
      print("===============================")

  

  def executarFuncao():
    modules[userValue]()
  executarFuncao()

CodePudding user response:

Don't put the name in the dictionary, but a reference to the function itself.

  modules = {
    1: funcao1,
    2: funcao2,
    3: funcao3,
    4: funcao4,
    5: funcao5,
  }

You need to put the function definitions before this. And you call it with ().

def funcaoSerExecutada():
  userValue = 0

  # Texto que será exebido na tela
  print("===============================")
  print("Escolha o módulo")
  print("===============================")
  print("1 - Estrutura: modelo_cantacom_vitrine_destinos_mod019_V3")
  print("2 - Estrutura: cantacom_n_mod072_aereas_100_V2;")
  print("3 - Estrutura: canta_destinos_vitrine_novo_modelo_estrutura;")
  print("4 - Estrutura: canta_mod050_estrutura; Obs: Valores apenas para Clube Smiles")
  print("5 - CANTACOM_100MILHAS-SMILESANDMONEY-VERTICAL_V1")
  print("===============================")
  


  # Pedir para o usuário digitar um valor, verificar se é um número e se essa opção digitada existe
  while (isinstance(userValue, str) or not userValue in modules):
    try:
      userValue = int(input("Digite um número: "))

      if(not userValue in modules):
        print("===============================")
        print("Essa opção não existe! Escolha uma das opções acima!")
        print("===============================")
    except:
      print("===============================")
      print("Ops, digite um número!")
      print("===============================")



  def funcao1():
    print("oi")

  modules = {
    1: funcao1,
    2: funcao2,
    3: funcao3,
    4: funcao4,
    5: funcao5,
  }

  def runFunction():
    modules[userValue]()
  runFunction()

CodePudding user response:

def funcaoSerExecutada(value: int) -> Callable:
  modules = {
    1: funcao1,
    2: funcao2,
    ...
  }
  return modules[value]

user_value = 1
funcaoSerExecutada(user_value)()
  • Related