Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] A condicional [if __name__ == '__main__'] me deixou confuso.

A primeira coisa que farei será: escreveremos o if __name__ == __main__. Então o que acontece? Quando ele executar e verificar que este arquivo aqui é o __main__, queremos que uma sequência de ações seja executada.

Gente, por favor, ajuda aqui. Normalmente as condicionais estão associadas a alguma função ou a alguma constante. Tô entendendo que essa condicional diz que se o nome for main, execute a função main() e a mesma chama outras funções. Minha dúvida é como que é esse trem tá dando True no ==? Como que o app tá executando como se o nome fosse main se na verdade é app.py? Imagino que essa comparação do nome não seja então algo relacionado ao nome do arquivo, não. Se assim fosse seria mais prático renomear o arquivo para main.py

Como podem ver, tô um pouco perdido nessa parte, alguém ajuda?

4 respostas
solução!

Pelo que eu entendi o __main__ é o "nome" de identificação dado internamente ao código que foi iniciado na mão ou pelo pycharm, não importa se o nome dele é main.py ou codigo.py, o sistema do python vai entender por baixo dos panos que esse é o nome de identificação desse código é: __main__ .

Ou seja quando você por exemplo vai executar esse código fazendo python3 app.py e dentro dele faz um if é assim que o python vai entender a sua pergunta:

if __main__ == __main__

isso é o mesmo que escrever:

SE o identificador do código que tá rodando agora for == um identificador de código que é executado como o principal

Entendi, Lucas. Agradecido.

Pessoal, também tive essa dúvida quando assisti a aula e concordo com Lucas https://cursos.alura.com.br/user/lucaslirab "o main é o "nome" de identificação dado internamente ao código que foi iniciado"

Para ter certeza que entendi, fiz dois códigos python com comentários, o codigo01.py e codigo02.py conforme abaixo para quem quiser, copiar e testar:

codigo01.py

#se executar no terminal o comando "python codigo01.py", esse será o código principal executado, ou seja, o MAIN identificado pelo python, 
#e exibirá aqui no codigo01.py o comando print dentro do if __name__ == '__main__':'''
print('Estou no codigo01')
if __name__ == '__main__':
    print('Executei no terminal o comando python codigo01, logo esse é o __main__') 
    

codigo02.py

#se executar no terminal o comando "python codigo02.py", esse será o código principal executado, ou seja, o MAIN identificado pelo python, 
#o código irá importar o codigo01.py que NÃO é o MAIN identificado pelo python,
#então NÃO exibirá no codigo01.py o comando print dentro do if __name__ == '__main__':'''
#e exibirá aqui no codigo02.py    o comando print dentro do if __name__ == '__main__':'''

import codigo01
print('Estou no codigo02')
if __name__ == '__main__':
    print('Executei no terminal o comando python codigo02, logo esse é o __main__') 

Abaixo execução e saída dos prints no terminal

python codigo01.py

Estou no codigo01
Executei no terminal o comando python codigo01, logo esse é o __main__

python codigo02.py

Estou no codigo01
Estou no codigo02
Executei no terminal o comando python codigo02, logo esse é o __main__

Bons estudos!

dá o seguinte erro pra mim: S C:\Users\fpera\Desktop\SABOR-EXPRESS> python app.py File "C:\Users\fpera\Desktop\SABOR-EXPRESS\app.py", line 43 if name == 'main': ^ IndentationError: unindent does not match any outer indentation level

não consigo sair desse erro