2 minutos
Python com main
Em Python (CPython), quando se importa um arquivo ou pacote, todo conteúdo é lido e executado, sabendo disso temos um arquivo que processa alguma informação:
def processa_texto():
[...]
def recupera_conteudo_arquivo():
[...]
def main():
[...]
main()
Nota: o conteúdo não nos interessa, apenas o conceito é necessário.
Para executarmos o arquivo, supondo que seu nome é processamento.py
, fazemos:
$ python processamento.py
Até este momento nada de novidade, mas e se eu precisar importar o arquivo processamento.py
dentro de outro? Lembra do primeiro paragráfo?
Se fizermos:
import processamento
Poderiamos utilizar o conteúdo do arquivo, mas na importação ele seria executado. Vamos a um exemplo mais simples ainda que demonstra de forma prática isto.
Neste contexto de execução na importação, vamos ao exemplo, com os arquivos teste.py
e teste2.py
:
$ cat teste.py
print __name__
$ cat teste2.py
import teste
Se fizermos:
$ python teste.py
__main__
$ python teste2.py
teste
Comportamentos esperados:
- No primeiro caso (executar o arquivo via linha de comando),
__name__
assume o valor de__main__
- No segundo (importar o arquivo) assume valor de
teste
(nome do arquivo a ser importado sem o.py
,
Lembrando que dentro de teste.py
existia um print
, então vemos que ele realmente executa o arquivo na importação.
Agora abriremos o teste.py
e colocaremos:
if __name__ == "__main__":
print __name__
E realizamos o teste novamente:
$ python teste.py
__main__
$ python teste2.py
Agora na execução de teste2.py
, não é mais executado o print
, justamente por incluirmos o if
. Somente quando __name__
for igual a __main__
ou seja, seja executado via linha de comando ele vai executar o conteúdo do if
.
Espero que o conteúdo tenha sido bem esclarecido, bons códigos a tod*s.