A condição __name__ e __main__ (dunder name e dunder main) é usada
quando há algo sendo executado em um script e você terá que importar esse
mesmo script, ou seja, no momento do import, o script será executado uma
vez gerando uma execução indesejada ou um comportamento estranho na sua lógica.
No exemplo abaixo, tem um script com uma função que executa algo e outra função que garante que será executado apenas uma vez.
No segundo script, nós importamos o primeiro script e executamos suas funções.
# funcao com execucao direta
def faca_algo():
print('1. Rodando script apenas uma vez')
faca_algo()
# funcao com condicao de execucao
def faca_algo_uma_unica_vez():
print('2. Usando "if __name__ == \'__main__\'"')
if __name__ == '__main__':
faca_algo_uma_unica_vez()from mod8_name_main import faca_algo, faca_algo_uma_unica_vez
# executando funcao sem condicao "if __name__ == '__main__'"
faca_algo()
# executando funcao com condicao "if __name__ == '__main__'"
faca_algo_uma_unica_vez()
# NOTE:
# faca_algo() ira rodar duas vezes pq no `from mod8_name_main`, o import do
# modulo roda o script inteiro e depois volta para o script de import, que
# executa mais uma vez a funcao no modulo original.
# Para evitar duplicidade de execucao, é realizada a condicao:
# `__name__ == __main__` que garante uma única execucao, mesmo durante a
# importacao do modulo.O resultado é que a função que não utiliza a condição
if __name__ == '__main__' será executado no momento do import e mais uma
vez na chamada da função, gerando mais de um print no terminal. Já a função 2
é executada somente no momento em que é chamada.
[Running] python -u "c:\Users\elias\Workspace\python-devaprender\mod8_name_main2.py"
1. Rodando script apenas uma vez
1. Rodando script apenas uma vez
2. Usando "if __name__ == '__main__'"
[Done] exited with code=0 in 0.055 secondsb001 - Add THIS To Your Python Scripts! if name == "main" - acessado em: 19/12/2023 - <link>