Ambiente de script de nível superior principal

O que é

__main__ é o nome do escopo em que o código de nível superior é executado. O nome de um módulo é definido como igual a __main__ quando lido da entrada padrão, de um script ou de um prompt interativo.

Um módulo pode descobrir se está sendo executado no escopo principal verificando seu próprio __name__, o que permite um idioma comum para executar código condicionalmente em um módulo. Quando é executado como um script ou com python -m, mas não quando é importado:

# __name__ == "__main__": verifica se o script é executado diretamente (não importado)
if __name__ == "__main__":  # Verdadeiro quando executado como script, Falso quando importado
    # executa somente se executado como script
    main()

Para um pacote, o mesmo efeito pode ser alcançado incluindo um módulo main.py, cujo conteúdo será executado quando o módulo for executado com -m.

Por exemplo, estamos desenvolvendo um script projetado para ser usado como um módulo, devemos fazer:

# Exemplo: a função pode ser importada, mas o código de teste só é executado quando executado diretamente
def add(a, b):
    return a+b

if __name__ == "__main__":  # Só é executado quando o arquivo é executado, não quando importado
    add(3, 5)
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Qual é o valor de __name__ quando um arquivo Python é executado diretamente como um script?
A. O nome do arquivo
B. "**main**"
C. None
D. True

Vantagens

  1. Todo módulo Python tem seu __name__ definido e, se for __main__, implica que o módulo está sendo executado de forma independente pelo usuário, e podemos tomar as ações apropriadas correspondentes.
  2. Se você importar este script como um módulo em outro script, o nome é definido como o nome do script/módulo.
  3. Arquivos Python podem funcionar como módulos reutilizáveis ou como programas autônomos.
  4. if __name__ == "__main__": é usado para executar algum código somente se o arquivo for executado diretamente e não estiver sendo importado.
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Qual é o principal objetivo de usar if __name__ == "__main__":?
A. Executar código somente quando o arquivo é executado diretamente, não quando importado
B. Impedir que o arquivo seja importado
C. Fazer o arquivo executar mais rápido
D. Ocultar código de outros módulos