Contole de escopo de execução

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).