Pra que serve a expressão if __name__ == ‘__main__’ no Python?

Ao procurar códigos em Python pela internet, você já deve ter tropeçado com o seguinte fragmento:

def main():
	...
	código
	...

if __name__ == '__main__':
	main()

À primeira vista, esse código pode parecer bastante esquisito, com todos esses sublinhados juntos, mas, na verdade, a lógica por trás dele é bastante simples.

Em primeiro lugar, é preciso saber que todo módulo em Python tem seu nome armazenado numa variável chamada __name__ na forma de uma string.

Quando importamos determinado módulo para dentro de um outro código, será atribuído à variável __name__ um nome igual ao nome do arquivo que usamos como módulo (sem a extensão ‘.py’).

Por exemplo, se criamos o módulo mod.py e importamos ele em outro código, seu __name__ será igual a ‘mod’. Entretanto, quando rodamos um módulo diretamente, isto é, quando mandamos o Python interpretar diretamente um certo módulo, será atribuído à variável __name__ o nome ‘__main__’

Ficou confuso? Pra entender esse negócio direito, basta rodar um programa de exemplo. Mas, antes disso, tenha em mente que qualquer código em Python pode ser utilizado como um módulo por outro programa. Ou seja, qualquer script que você escreva contendo certas funcionalidades pode ser utilizado em códigos futuros utilizando a instrução import.

Agora, crie o arquivo mod.py contendo o seguinte código:

print(__name__)

Em seguida, crie um arquivo chamado script.py na mesma pasta que o arquivo anterior com o seguinte código:

import mod
print(__name__)

Se você fez tudo certinho, ao executar script.py, teremos a seguinte saída:

mod
__main__

Quando importamos o módulo mod.py, o interpretador executa o conteúdo dele, o que no nosso caso é apenas um print(__name__). Como mod.py foi importado por outro script, então seu nome será igual ao nome do arquivo, ou seja, mod.

Em seguida, o programa executa a instrução print(__name__) do programa principal. Como ele não está sendo importado por outro script, seu nome será ‘__main__’

Sendo assim, quando escrevemos:

if __name__ == '__main__':
	main()

 

Estamos nada mais, nada menos, que dizendo para o interpretador que o código contido no script deverá ser executado somente se o script for rodado diretamente,. Ou seja, caso importemos o script em questão, ainda poderemos fazer uso de suas funcionalidades, entretanto, seu conteúdo não sera executado automaticamente.

É claro que se você escrever alguma coisa fora de alguma classe ou função e fora desse if, ela ainda será executada automaticamente, ao importarmos o módulo! A ideia é que todo o código que estivesse fora de uma função ou classe no código original entre para a função main(), que será executada caso o programa esteja rodando diretamente.

Acredito que agora tenha ficado clara a ideia por trás desse fragmento de código, bastante utilizado e considerado como boa prática entre os programadores Python. Mas, caso ainda tenha ficado com alguma dúvida, pode escrever nos comentários!

Related Posts

2 thoughts on “Pra que serve a expressão if __name__ == ‘__main__’ no Python?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *