segunda-feira, 21 de abril de 2014

__name__ == '__main__'

Para os iniciantes em Python, com certeza já se deparou e ficou curioso o que quer dizer __name__ == '__main__' no final do script, right?
Irei explicar isso na prática... Vamos começar fazendo um simples script (utilizo o Python 3, porque é foda e mais tarde explicarei o porquê).

Abra aí o seu shell e escreva:
cd desktop && mkdir popo && cd popo && echo print (__name__) > slayerowner.py


Agora note que foi criado um simples script .py no diretório popo.
Beleza temos um script, já sabemos que podemos usar ele como programa (executando na linha de comando) ou módulo (fazendo a importação), Executando ele na linha de comando, olhe o que nos dar em retorno..

Assim que executa o script, simplesmente executa e sai normalmente, o que não tem nada de errado.
Se importarmos esse print __name__ para o interpreter, vai imprimir o nome do arquivo.


O __main__ é algo que todo script python quando é executado na linha de comando recebe. Logo então __name__ == '__main__' serve para averiguar se o script está sendo executado na linha de comando ou sendo importado. Agora você se pergunta: "Isso serve pra que cara? 0_o".
Pense em um script com algumas funções no começo dele sendo declarada e logo no meio/final estão usando-os para receber os valores como quisera.


#!/usr/bin/env python

def int(x):
 return x - 9
def float(x):
 return x**5/2
 
print (int(4))
print (float(20))


resultado:
-5
1600000.0

Então aí você pensa: "Mas eu não queria esses valores, quero utilizar as funções na qual está disponível no script". É nessa hora que editamos o script para:

#!/usr/bin/env python

def int(x):
 return x - 9
def float(x):
 return x**5/2

if __name__ == '__main__':
 print (int(4))
 print (float(20))

Nesse estado o resultado da execução vai ser diferente se o __name__ for igual à __main__, ou seja se for executado em linha de comando ou usado como módulo.

Nenhum comentário:

Postar um comentário