Executando verificação de segurança...
8

Python: para que serve if __name__ == '__main__' e como utilizar

Quando um interpretador Python lê um arquivo, ele primeiro define algumas variáveis especiais. Em seguida, ele executa o código do arquivo.

A variavel __name__ em if __name__ == "__main__" é uma dessas variáveis. A seguir neste artigo você vai aprender a utilizar esse código corretamente.

Resumo

Essa condição permite executar o código quando o arquivo é executado como um script, mas não quando é importado como um módulo.

Módulos Python

Os arquivos Python são chamados de módulos e são identificados pela extensão de arquivo .py.
Quando o interpretador executa um módulo, a variável __name__ será definida como __main__ se o módulo que está sendo executado for o programa principal.
Mas se o código estiver importando o módulo de outro módulo, o __name__ variável será definido para o nome desse módulo.

Na prática

Crie os módulos Python chamados modulo_1.py e modulo_2.py, cole os respectivos códigos para seus módulos:

  • modulo_1:
import modulo_2

print("O valor de __name__ em modulo_1: {}".format(__name__))
  • modulo_2:
print("O valor de __name__ em modulo_2: {}".format(__name__))

if __name__ == "__main__":
   print("modulo_2 NÃO foi importado")
else:
   print("modulo_2 foi importado")

Ao executar o modulo_1 vamos ter a saída:

O valor de __name__ em modulo_2: modulo_2
modulo_2 foi importado
O valor de __name__ em modulo_1: __main__

Ao executar o modulo_2 vamos ter a saída:

O valor de __name__ em modulo_2: __main__
modulo_2 NÃO foi importado
Carregando publicação patrocinada...
1
1

Ótimo post, Samuel!
Esse assunto me dá um nó as vezes por envolver a perspectiva do programa que foi executado por primeiro, e isso me deixa meio confuso as vezes. Mesmo assim, a explicação foi excelente!
Uma pergunta, uma aplicação útil pra esse conceito é quando tenho um módulo Python que é tanto executado de forma independente quanto importado por outro módulo?

1
1

É esse tipo de publicação que eu espero do TabNews. Publicações técnicas ou dúvidas sobre programação e TI em geral, para receber soluções nos comentários. Até o momento, a maioria são publicações de textos copiados de outros sites. Espero que o TabNews rume para um modelo stackoverflow da língua portuguesa.

1
1
1

Bacana o post!
Agora me surgiu uma dúvida, é permitido postar dúvidas técnicas aqui no tabnews?
Tipo estou bem cansando de lugares como o stackoverflow e outras comunidades, que estão muito tóxicas. Aqui o ambiente é muito delicinha :3

1

Bom dia SamuelMayer!

Muito bom o post, ninguém fala sobre o porque colocar o condicional de main no início e finalmente entendi que ele define se é um módulo importado.

Muito clara a explicação.

1
1

Trabalhei muito pouco com python na minha vida, apesar de geralmente recomendar essa linguagem para aprender lógica de programação à quem está iniciando nesse mundo.

Até ler essa Tab, achei que sabia o que era essa pattern que sempre via pessoas usando, mas agora percebo que apenas estava no começo daquele gráfico de Confiança x Conhecimento