Olá,
Em Python, quando criamos um módulo, criamos um contexto onde poderemos criar variáveis, funções etc.
Nesse contexto, além das variáveis e funções que criamos, o Python tbm cria algumas variáveis e funções. Alguns exemplos são __name__
e __file__
, variáveis criadas pelo Python para se referir ao próprio módulo. Como se vc falasse eu mesmo.
__name__
é a variável que guarda o nome do módulo/contexto. __main__
será o valor da variável __name__
do módulo principal.- Em todos os outros módulos,
__name__
guardará o nome do módulo.
Um exemplo
Crie dois módulos, modulo1.py
e modulo2.py
No modulo1
, insira o seguinte código:
# -*- coding: utf-8 -*-
# modulo1.py
print('Variáveis no modulo1')
print(__name__)
print(__file__)
print('\nImportando modulo2\n')
import modulo2
No modulo2
, insira o seguinte código:
# -*- coding: utf-8 -*-
# modulo2.py
print('Variáveis no modulo2')
print(__name__)
print(__file__)
Execute python modulo1.py
. A saída será algo como:
Variáveis no modulo1
__main__
/.../modulo1.py
Importando modulo2
Variáveis no modulo2
modulo2
/.../modulo2.py
Duas coisas importantes:
Veja que o quando vc importa um módulo a partir de outro, o Python já executa o código do módulo importado. Esse é o comportamento padrão dele. Para impedir isso, criamos funções. Se o código do módulo2 estivesse envolvido em uma função, não seria executado pelo Python, somente lido.
Ao executar o código do modulo2, ele exibiu o valor da variável name, que lá é modulo2. Ou seja, main será sempre seu módulo de entrada, seu entry point. Os demais, será sempre o nome do próprio módulo.
Por isso, podemos utilizar, quando necessário, o if __name__ == '__main__'
. Essa expressão impede que um módulo que esteja sendo importando por outro, seja executado, pois verifica se o nome do módulo for __main__
ele chama alguma função, do contrário não.
Para testar isso, altere seu modulo2
para:
# -*- coding: utf-8 -*-
# modulo2.py
def func():
print('Variáveis no modulo2')
print(__name__)
print(__file__)
Execute novamente python modulo1.py
. Verá que a saída será algo como:
Variáveis no modulo1
__main__
/.../modulo1.py
Importando modulo2
Ou seja, o código não foi executado, somente lido.
Caso queira executar o código, é só adicionar ao final do modulo1 o seguinte código:
modulo2.func()
[]'s