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

n sei para que

eu uso python 3 porem me daeparo com algo curioso

if(__name__=='__main__'):
    alguma_coisa()

e eu ainda n sei oque ele faz ou para que ele serve ou sua importancia pf me digam oque isso faz

4 respostas

Oi Daniel tudo bem?

Poderia colocar o link da aula que viu esse código para eu entender o contexto.

E sobre import

Importar suas funçoes

solução!

Olá Daniel!

Vi que você já fez cursos sobre Java então irei comparar ok?

O código:

if(__name__=='__main__'):

É um pouquinho semelhante ao:

public static void main(String[] args){}

__main__ é o nome interno que todo programa/módulo Python recebe quando é executado.

Imagine que você criou o seguinte script:

alura.py

print __name__

Quando você executar na linha de comando ele irá nos retornar: __main__:

$ python alura.py

__main__

Quando importarmos ele veremos que isso muda:

>>> import alura

alura

Repare que nossa variavel __name__ agora retornou um valor diferente (alura) que foi o nome que demos para nosso módulo.

O __name__ == '__main__' serve justamente para sabermos se o nosso programa está sendo executado como um programa ou sendo importado como um módulo.

Vamos ver um exemplo prático disso:

Imagine que você tem um módulo cheio de funções matemáticas que quer usar em outro módulo:

aluraMath.py

adc(a, b):
    return a + b

sub(a,b):
    return a - b

div(a,b):
    return a / b

mult(a,b)
    return a * b

Ai você decidiu colocar uns prints para testar seu código:

adc(a, b):
    return a + b

sub(a,b):
    return a - b

div(a,b):
    return a / b

mult(a,b)
    return a * b

print adc(1,1) # retorna 2
print sub(2,2) # retorna 0
print div(2,2) # retorna 1
print mult(3,3) # retorna 9

Se executarmos o código acima teremos o seguinte resultado:

$ python aluraMath.py

2
0
1
9

Até ai tudo bem, mas e se precisarmos importar nosso módulo para usar as funções que criamos?

>>> import aluraMath

2
0
1
9

Vixi, queriamos usar as funções do aluraMath e não ver esses números!!

O problema é que esses prints estão acontecendo de forma incondicional não importando se estamos executando ou importando.

Para resolver esse problema usamos o __name__ == '__main__':

adc(a, b):
    return a + b

sub(a,b):
    return a - b

div(a,b):
    return a / b

mult(a,b)
    return a * b

if __name__ == '__main__':

    print adc(1,1) # retorna 2
    print sub(2,2) # retorna 0
    print div(2,2) # retorna 1
    print mult(3,3) # retorna 9

Agora o programa terá um comportamento diferente quando executarmos na linha de comando ou importarmos como um módulo! :D

Espero que tenha ajudado!

Bons estudos! ^^

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software