Introdução
O motivo de usar o if __name__ === "__main__"
é para identificar quando vamos executar o conteúdo interno dessa condição. Se o name ser igual à main, significa que esse arquivo está sendo executado diretamente.
Porém, se ele não for executado diretamente, como por exemplo ser importado em outro arquivo, o __name__
não será igual a __main__
, portando não será executado o conteúdo interno da condicional.
Vamos ao exemplo prático
Crie um arquivo chamado: utilitarios.py
e cole o código abaixo:
def somar(n1, n2):
return n1 + n2
def testar(text):
print(text)
resposta = somar(10,10)
testar(resposta)
Agora crie o arquivo main.py
e cole o código abaixo:
from utilitarios import somar
somar(10, 10)
Explicação
Veja que no utilitarios.py
temos 2 funções, e no fim, estamos executando as 2 funções.
No outro arquivo, main.py
, importamos a função somar
do arquivo utilitarios.py
.
Se executarmos diretamente o arquivo main.py
, além de importar a função somar
do arquivo utilitarios.py
o seguinte trecho:
# ... (utilitarios.py) ...
resposta = somar(10,10)
testar(resposta)
Ou seja, a cada execução do main.py
, ele processa outra execução do utilitarios.py
. Isso é um problema, ainda mais se a função processa muita informação, você estaria gastando recursos do seu programa de forma desnecessaria.
Resolvendo o problema
Portanto, o if __name__ === '__main__'
resolve esse problema. Se você quiser manter esse "teste" no utilitarios.py
para quando for executar diretamente, tudo bem, mas se ele apenas for usado para importar algum metodo, ele não executa. Veja como podemos fazer isso:
utilitarios.py
def somar(n1, n2):
return n1 + n2
def testar(text):
print(text)
if __name__ == "__main__":
resposta = somar(10,10)
testar(resposta)
Conclusão
Agora sim, você pode executar o seu python main.py
sem se preocupar com as chamadas das funções dentro do utilitarios.py
.
Dessa forma, só serão executados as funções se o script for executado diretamente.
python utilitarios.py