Skip to content

Instantly share code, notes, and snippets.

@eliasalbuquerque
Created December 19, 2023 19:14
Show Gist options
  • Select an option

  • Save eliasalbuquerque/106a230644c209d22bf47ed261a431ff to your computer and use it in GitHub Desktop.

Select an option

Save eliasalbuquerque/106a230644c209d22bf47ed261a431ff to your computer and use it in GitHub Desktop.
Curso Dev Aprender | Jhonatan de Souza

if __name__ == '__main__'

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.

Script principal

# 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()

Script secundário que irá importar o script principal

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.

Terminal

[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 seconds

Referência

b001 - Add THIS To Your Python Scripts! if name == "main" - acessado em: 19/12/2023 - <link>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment