Na aula de hoje eu quero te ensinar o que significa a estrutura if name main no Python (if__name__==”__main__”) e como ela funciona!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Você já deve ter visto essa estrutura em algum código ou até mesmo quando estava estudando Python, não é mesmo?
Hoje eu quero te mostrar o que significa esse código para que você não fique perdido e saiba como utilizar da forma correta principalmente na importação de arquivo no Python!
É importante que saiba não só o que é essa estrutura, mas como ela funciona dentro do seu código para que você consiga utilizá-la de forma correta quando precisar!
Para essa aula nós vamos utilizar o código da aula de como obter cotações de moedas no Python, mas já vamos deixar os arquivos disponíveis para que você possa acompanhar.
A ideia desse código é que você consiga pegar a cotação atual das moedas que estão no arquivo codigos_modedas.txt, que contém o código de cada uma dessas moedas.
O código vai passar por toda a lista e vai
Aqui nós temos o código de pegar_cotacao.
import requests
def pegar_cotacao_atual(moeda_origem, moeda_destino):
with open("codigos_moedas.txt", "r") as arquivo:
codigos_moedas = arquivo.read().split("\n")
if moeda_origem not in codigos_moedas:
print("Moeda de Origem não encontrada")
if moeda_destino not in codigos_moedas:
print("Moeda de Destino não encontrada")
link = f"https://economia.awesomeapi.com.br/last/{moeda_origem}-{moeda_destino}"
requisicao = requests.get(link)
if requisicao:
cotacao = requisicao.json()[moeda_origem + moeda_destino]["bid"]
return cotacao
else:
print("Combinação não existente na API")
return ""
if __name__ == "__main__":
print(pegar_cotacao_atual("EUR", "BRL"))
print("lira é doidao")
E nesse código você já vai notar que nós temos a estrutura if __name__ == “__main__” com alguns prints.
Daqui a pouco você vai entender por que eles estão ai e como eles vão funcionar.
from pegar_cotacao import pegar_cotacao_atual
with open("precos.txt", "r") as arquivo:
lista_precos = arquivo.read().split("\n")
for linha in lista_precos:
mercadoria, valor, moeda = linha.split(",")
cotacao = pegar_cotacao_atual(moeda, "BRL")
print(f"{mercadoria} tá custando R${float(cotacao) * float(valor):,.2f} hoje")
E aqui nós temos o nosso código principal que vai importar arquivo no Python, que é exatamente o arquivo pegar_cotacao.
Quando nós fazemos a importação de um arquivo você vai notar que ao executar seu código, ele vai executar esse arquivo importado, mas só vai exibir o que está dentro do arquivo sem o que está dentro da estrutura if name main.
O conteúdo dentro da estrutura if__name__==”main” só vai ser executado quando você executar o código diretamente, ou seja, se importar e executá-lo por um código secundário, ele não vai aparecer.
Então nesse exemplo se você rodar o código pegar_cotacao você vai visualizar os 2 prints que estão dentro da estrutura.
Agora se você executar o código main.py vai notar que o que está dentro da estrutura não aparece no resultado.
Não é algo complicado, é só você pensar na própria estrutura do If no Python, quando você executa um arquivo diretamente dentro dele essa variável name vai receber o valor main, caso contrário não recebe esse valor.
Então quando for fazer a comparação dentro do If, se estiver rodando o código principal essa verificação é verdadeira e ele executa o conteúdo, caso contrário a verificação é falsa e o código é ignorado.
Exemplo
Pense assim, o código que possui essa estrutura if name main está sendo executado à partir dele mesmo? Se sim, vamos executar o conteúdo dessa estrutura.
Caso contrário ele estará sendo executado a partir de outro código, portanto a estrutura if name main não será executada.
Ficou mais fácil de entender dessa forma? Abaixo vamos ter outra explicação para que fique mais claro como funciona essa estrutura e quando ela será executada dentro do seu código.
Ao rodar qualquer arquivo em Python ele automaticamente, antes de tudo, define a variável __name__, que é uma variável reservada do Python.
Então quando fazemos uma execução direta, executando o próprio arquivo, ele atribui o valor “__main__” para essa variável.
Isso quer dizer que, estamos executando o arquivo de forma direta, ou seja, abrimos o arquivo e estamos executando ele. Dessa forma a variável __name__ recebe o valor __main__.
No entanto, quando importamos esse arquivos e executamos através de um segundo arquivo, essa variável recebe outra informação.
Então ao fazer a comparação de __name__ = “__main__” ela será falsa e, portanto, não vai executar o conteúdo dessa estrutura.
Por esse motivo quando executamos o código diretamente no arquivo ele lê todo o conteúdo da estrutura e quando executamos através da importação do arquivo ele não lê o que está na estrutura.
Dessa forma o valor atribuído a variável __name__ é diferente de “__main__”!
Isso é interessante quando você vai fazer algum teste no seu arquivo principal, mas não quer que ele seja executado em arquivos secundários, então pode colocar alguma função que só funcione no arquivo principal.
Gostou do conteúdo? Quer aprender mais sobre esse tema e ver mais detalhes? Basta clicar aqui que vou te levar para uma publicação da Alura que mostra alguns exemplos para facilitar o entendimento.
Nessa aula eu te mostrei o que significa o if__name__==”__main__” no Python e como você pode utilizar essa estrutura dentro do seu código para executar ou não uma parte específica do código em outro arquivo.
Agora que você já sabe como funciona não vai ter mais dúvidas quando visualizar essa estrutura em outros códigos e vai saber exatamente o que ela faz.
Você pode testar isso nos seus próprios códigos para verificar o que vai rodar ou não dentro dessa estrutura de acordo com a execução do código direto ou da execução através da importação do arquivo!
Pode inclusive, trabalhar com essa questão do if name main para rodar algo específico apenas no código principal, assim ele não executa essa ação em códigos segundários.
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.