Olá, Visitante. Por favor Entre ou Registe-se se ainda não for membro.
Perdeu o seu e-mail de activação?
21 de Novembro de 2008, 00:35
231040 Mensagens em 23423 Tópicos por 7939 Membros
Membro Mais Recente: catano
Portugal-a-Programar  |  Desenvolvimento  |  Python  |  [Python]-Tutoriais / How to's  |  [PyTeam] if __name__ == '__main__' - Para que serve? « anterior seguinte »
Páginas: [1]
Autor Tópico: [PyTeam] if __name__ == '__main__' - Para que serve?  (Lida 1145 vezes)
djthyrax
SPAM::erase();
Moderador
Stack Overflow
*
Offline Offline

Mensagens: 11357



« em: 30 de Novembro de 2007, 20:16 »

Esta foi uma questão que hoje me chegou via PM aqui no P@P: para que servia o if __name__ == '__main__': usado em muitos programas.

O if __name__ == '__main__': serve para se saber se se está a correr o ficheiro directamente ou se está a ser importado por outro programa. Desta maneira, podemos usar o mesmo ficheiro sem ter que fazer alterações para testar o módulo, correndo-o directamente, ou importá-lo directamente noutro programa.

Aqui fica um exemplo:

aminhalib.py
Código
GeSHi (python):
class oMeuObjecto:
   def __init__(self, nome, lulz = ''):
       self.nome = nome
       self.misc = []
       if lulz.strip != '':
           self.misc.append(lulz)
 
if __name__ == '__main__':
   teste = oMeuObjecto('ola')
   print "Conteudos do objecto:\nNome: %s\nMisc: %s" % (self.nome, str(self.misc))
 
Created by GeSHI 1.0.7.20

omeuprograma.py
Código
GeSHi (python):
import aminhalib
users = []
clientesTratados = []
 
for nome in ["ola", "ole", "jose", "xutos", "pontapes"]:
   users.append(aminhalib.oMeuObjecto(nome))
 
for user in users:
   print "Deseja definir o número de '%s' como 123456789?" % user.nome
   if raw_input().lower() == 'y':
       user.misc.append("Numero: 12345679")
       clientesTratados.append(user)
 
print
print "Adeus!"
 
Created by GeSHI 1.0.7.20

Se corrermos o aminhalib.py, o output que recebemos vai ser:
[djthyrax@pyteam ~]$ python aminhalib.py
Conteudos do objecto:
Nome: ola
Misc: []


No entanto, isto não vai aparecer correndo o omeuprograma.py:
[djthyrax@pyteam ~]$ python omeuprograma.py
Deseja definir o número de 'ola' como 123456789?
y
Deseja definir o número de 'ole' como 123456789?
n
Deseja definir o número de 'jose' como 123456789?
n
Deseja definir o número de 'xutos' como 123456789?
n
Deseja definir o número de 'pontapes' como 123456789?
y

Adeus!


Como se pode ver, com o if __name__ == '__main__':, podemos testar o módulo em si e, sem ter que apagar o código de teste, usar o ficheiro numa aplicação. Smiley

2007 by djthyrax @ PyTeam.
Registado


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Tharis
Líder da PyTeam
Líder de Equipas
Unsigned User
*****
Offline Offline

Mensagens: 1422


I'M A GENIUS AND YOU SUCK!


« Responder #1 em: 30 de Novembro de 2007, 21:31 »

Nice tut tirácio!

PyTeam ROCKS!
Registado

Python Does the Job!

Why do People love hating and hate loving?
Páginas: [1]
Portugal-a-Programar  |  Desenvolvimento  |  Python  |  [Python]-Tutoriais / How to's  |  [PyTeam] if __name__ == '__main__' - Para que serve? « anterior seguinte »
    Ir para: