Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Otimização do codigo Duvida

print("*********************************")
print("Bem vindo ao jogo de Adivinhação!")
print("*********************************")

numero_secreto = 42

chute = int(input("Digite o seu número: "))
correto = numero_secreto == chute
maior   = chute > numero_secreto
menor   = chute < numero_secreto

if (correto):
    print ("Arroy Miserávi é um genio")
else:
    if (maior):
        print ("FAiooooooooooo, foi alto disgraça")
    elif (menor):
        print ("Foi baixo disgraça")

print ("Fim do super jogo")

Minha pergunta, qual é custo operacional do python para criação de mais variáveis para os testes ?Ou em questão de execução o custo será o mesmo? Tentando ser mais claro, é melhor colocar a sintaxe dos testes dentro do if, ou criar uma variável com o teste vai ter o mesmo custo operacional ? Qual seria mais performático?

Falo em otimização do código não em sintaxe

2 respostas
solução!

Oii Laercio, como você está? Espero que esteja bem ^-^

A diferença será mínima, quase que imperceptível, pois em ambos os casos a expressão terá que ser avaliada, com a diferença que em uma das abordagens a expressão será avaliada e atribuída a uma variável. Por isso, para casos assim fica a critério.

Como confirmar que a diferença entre os casos será mínima?

Podemos utilizar a biblioteca timeit (não é necessário instalar, pois ela é padrão do python) para executarmos um trecho de código um determinado número de vezes e após toda essa execução, essa biblioteca nos fornecerá o tempo mínimo gasto. Por padrão, a biblioteca define uma execução de 1 milhão de vezes para o trecho passado como parâmetro. Veja:

import timeit
def com_variaveis():
  numero_secreto = 42
  chute = 1000
  correto = numero_secreto == chute
  maior   = chute > numero_secreto
  menor   = chute < numero_secreto

  if (correto):
      ...
  else:
      if (maior):
          ...
      elif (menor):
          ...
def sem_variaveis():
  numero_secreto = 42
  chute = 100

  if (numero_secreto == chute):
     ...
  else:
      if (chute > numero_secreto):
          ...
      elif (chute < numero_secreto):
          ...
timeit.timeit(stmt=com_variaveis)

Resultado: 0.1472199470003943 milisegundos
timeit.timeit(stmt=sem_variaveis)

Resultado: 0.12230607399988003 milisegundos

Observe que tivemos uma diferença mínima nas duas abordagens. Obs: os prints foram retirados para não impactar na performance, pois, para imprimir uma mensagem na tela leva-se um tempo.

Vale lembrar que quando atribuímos a expressão a uma variável fica explícito o que estamos testando. Em um cenário geral, por vezes, quando priorizamos a otimização deixamos de lado a legibilidade, mas nem sempre esse é o objetivo, principalmente em casos onde não teremos tanta diferença de um caso para o outro. Fora isso, pode ter situações onde precisaremos utilizar variáveis para reutilizá-la em mais trechos.

Deixo como referência a documentação da biblioteca timeit (em inglês):

Qualquer dúvida estou por aqui, tá? A gente vai conversando.

Grande abraço!

@Nadia , muito obrigado , como sou de infra ia tentar achar um jeito de testar como time nativo do linux (assim que conseguisse respirar no trabalho).

Adorei saber dessa função timeit , muito obrigado :)

Mais que respondeu minha pergunta ! Abraços