O que faz o if __name__ == “__main__”: ?

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

Quando você começando a programar em Python, é comum encontrar o bloco de código parecido com o abaixo:

if __name__ == "__main__":
    print("Olá, Mundo!")

Essa linha pode parecer enigmática à primeira vista, mas é uma expressão idiomática comum em Python que serve a um propósito específico. Vamos detalhar o que ela faz e por que é importante incluí-la em seus scripts Python.

Entendendo a Variável __name__ em Python

Em Python, a variável especial __name__ é usada para determinar se um arquivo Python está sendo executado como o programa principal, ou se está sendo importado como um módulo em outro programa.

Quando você executa um script Python diretamente, por exemplo, digitando:

python meuscript.py

Na linha de comando, a variável __name__ é definida como "__main__". No entanto, se o mesmo script for importado em outro script, a variável __name__ será definida como o nome do arquivo do script (sem a extensão .py).

O Papel da Verificação if __name__ == "__main__":

A verificação if __name__ == "__main__": é usada para garantir que certos códigos sejam executados apenas quando o script for executado diretamente. Isso é particularmente útil quando você deseja fornecer tanto a funcionalidade de um módulo reutilizável quanto de um script autônomo.

Aqui estão alguns cenários onde não incluir essa verificação pode causar problemas:

  • Importando um Script: Se você importar um script que não possui essa proteção, qualquer código que estiver “solto”, fora de funções, será executado. Isso pode levar a comportamentos inesperados e erros, especialmente se o script foi projetado para ser executado como um programa autônomo.
  • Desserialização com pickle: Quando você desserializa um objeto de um arquivo pickle, o Python pode precisar importar o módulo onde esse objeto foi definido. Por exemplo, se o objeto salvo no formato pickle for um DataFrame do pandas, o Python terá de importar a biblioteca pandas implicitamente. Sem a proteção if __name__ == "__main__":, você pode executar código inadvertidamente.

Exemplo Prático

Considere o seguinte script, foo.py:

# foo.py

print("Isso sempre será impresso.")

def main():
    print("Isso só será impresso se foo.py for executado diretamente.")

if __name__ == "__main__":
    main()

Quando você executa foo.py diretamente, ele imprime ambas as mensagens. No entanto, se você importar foo.py em outro script, apenas a primeira mensagem é impressa, e a função main() não é chamada.

Por Que Esse Padrão é Útil?

Esse padrão é útil por diversas razões:

  • Testes: Você pode incluir código de teste em seu script que é executado quando o script é executado diretamente. Isso ajuda a verificar se o seu código funciona conforme o esperado sem a necessidade de um arquivo de teste separado.
  • Dupla Funcionalidade de Script e Módulo: Você pode projetar seu código como um módulo reutilizável ou como um script autônomo. Outros desenvolvedores podem importar seu módulo sem executar a parte do script do código.
  • Controle Sobre a Execução: Isso lhe dá controle sobre quais partes do seu código são executadas dependendo do contexto, o que pode prevenir efeitos colaterais de instruções de importação.

Resumo

Em resumo, a expressão idiomática if __name__ == "__main__": é uma maneira de garantir que certos códigos sejam executados apenas quando um arquivo Python é executado como o programa principal e não quando é importado como um módulo. É uma boa prática usar essa verificação para evitar comportamentos inesperados e para fornecer pontos de entrada claros no seu código. Seja você um escritor de módulos, scripts ou ambos, esse padrão é uma parte essencial da escrita de código Python limpo e de fácil manutenção.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse: