Contole de escopo de execução#
if __name__ == “__main__”#
Quando um interpretador de Python lê um arquivo em Python, ele primeiro define algumas variáveis especiais. Depois, ele executa o código do arquivo.
Uma dessas variáveis é chamada de __name__.
def aloFulano(name):
print(f"Alô, {name}!")
if __name__ == "__main__":
# Somente será executado se o script é executado como programa main
aloFulano(input("digite seu nome"))
Alô, informatica!
Os arquivos em Python são chamados de módulos e são identificados pela extensão .py. Um módulo pode definir funções, classes e variáveis.
Assim, quando o interpretador executa um módulo, a variável __name__ será definida como __main__ se o módulo que estiver sendo executado for o programa principal (main).
No entanto, se o código estiver importando o módulo de outro módulo, a variável __name__ será definida como o nome daquele módulo.
Vejamos um exemplo. Crie um módulo em Python chamado excessaoUm.py e cole esse código de nível superior nele:
# módulo excecaoUm
print("__name__ no arquivo um está definido como: {}" .format(__name__))
__name__ no arquivo um está definido como: __main__
Agora vamos adicionar outro módulo, excessaoDois.py, e colar nele este código:
# módulo excessaoDois.py
if __name__ == "__main__":
print("Arquivo dois executado quando rodou diretamente")
else:
print("Arquivo dois executado ao ser importado")
print("__name__ no arquivo dois está definido como: {}" .format(__name__))
Agora, vamos modificar o código em excessaoUm.py para que possamos importar o módulo excessaoDois.py dessa maneira:
from modulos import excecaoDois
print("__name__ no arquivo um está definido como: {}" .format(__name__))
if __name__ == "__main__":
print("Arquivo um executado quando rodou diretamente")
else:
print("Arquivo um executado ao ser importado")
Arquivo dois executado ao ser importado
__name__ no arquivo dois está definido como: modulos.excecaoDois
__name__ no arquivo um está definido como: __main__
Arquivo um executado quando rodou diretamente
A variável __name__ para o arquivo/módulo que é executado será sempre __main__. Mas a variável __name__ para todos os outros módulos que são importados será definida com o próprio nome do módulo.
Use a variável __name__, caso você queira que um arquivo seja executado como o programa principal (main) ou importado por outros módulos. Podemos usar um bloco if __name__ == “__main__” para permitir ou evitar que partes do código sejam executadas ao importar os módulos.
Quando o interpretador do Python lê um arquivo, a variável __name__ é definida como __main__ se o módulo que está sendo executado, ou como o nome do módulo se ele for importado. Ler o arquivo executará todo o código de nível superior, mas não as funções e classes (já que elas serão apenas importadas).