OrdemDeExecucao

Python é uma linguagem dinâmica e interpretada, e não tem um pré-processador (como existe em C). A ordem em que os comandos de um programa Python são executados obedece a algumas regras simples.

Para testar seu conhecimento sobre estas regras, faça os exercícios abaixo.

Exercício 1

Observe que a listagem abaixo possui vários comantos print (e um sys.stdout.write) com marcadores numerados assim: "-> N".

Quais são os dois primeiros marcadores que aparecem na saída quando o programa é executado?

Dica: o segundo não é o '-> 2'

Rode o programa somente depois de responder a pergunta, para saber se acertou!

   1 import sys
   2 import atexit
   3 
   4 print '-> 1 inicio'
   5 
   6 def funcaoA():
   7     print '-> 2 funcao A'
   8     return 'resultado A'
   9 
  10 def funcaoB():
  11     print '-> 3 funcao B'
  12 
  13     def funcaoC():
  14         print '-> 4 funcao C'
  15         
  16     return funcaoC
  17     
  18 funcaoD = lambda:sys.stdout.write('-> 5 funcao D\n')
  19 
  20 def funcaoE():
  21     print '-> 6 funcao E'
  22         
  23 class Classe(object):
  24     print '-> 7 bloco de declaracoes da Classe'
  25     
  26     def __init__(self):
  27         print '-> 8 inicializacao da instancia da Classe'
  28         
  29     def metodo(self):
  30         print '-> 9 metodo da instancia da Classe'
  31         return 'resultado metodo'
  32         
  33     class ClasseInterna(object):
  34         print '-> 10 bloco de declaracoes da ClasseInterna'
  35         
  36     def __del__(self):
  37         print '-> 11 destruicao da instancia da Classe'                
  38         
  39 if True:
  40     print '-> 12 condicional True'
  41     
  42 if False:
  43     assert False, 'Isso nunca devia acontecer'
  44 
  45 atexit.register(funcaoE)
  46 
  47 print '-> 13 logo antes do if __main__'
  48 
  49 if __name__=='__main__':
  50     print '-> 14 __main__'
  51     print funcaoA
  52     print funcaoA()
  53     print '-> 15 __main__ (cont.)'
  54     print funcaoB
  55     resultadoB = funcaoB()
  56     print resultadoB
  57     objeto = Classe()
  58     objeto.metodo()
  59     resultadoB()
  60     print funcaoD
  61     funcaoD()
  62     class Local(object):
  63         print '-> 16 bloco de declaracoes da classe Local'        
  64     print '-> 17 __main__ (final)'
  65 print '-> 18 FIM'    

Exercício 2

Quais são o penúltimo e o último marcadores que aparecem na saída quando o programa acima é executado?

Exercício 3

Anote em um pedaço de papel em que ordem todos os marcadores do programa acima aparecerão na saída.

Exercício 4

O programa abaixo importa o modulo acima. Anote em um pedaço de papel em que ordem os marcadores "-> N" e os pontos I e II aparecerão na saída do programa. Depois rode o programa para saber se acertou.

   1 print '=> ponto I'
   2 
   3 import execucao_pergunta
   4 
   5 print '=> ponto II'

OrdemDeExecucao (editada pela última vez em 2008-09-26 14:05:49 por localhost)