associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "OrdemDeExecucao"

Diferenças entre as versões de 7 e 9 (2 versões de distância)
Revisão 7e 2008-05-27 22:09:39
Tamanho: 2434
Comentário:
Revisão 9e 2008-09-26 14:05:49
Tamanho: 2759
Editor: localhost
Comentário: converted to 1.6 markup
Deleções são marcadas assim. Adições são marcadas assim.
Linha 49: Linha 49:
    class ClasseInterna(object):
        print '-> 10 bloco de declaracoes da ClasseInterna'
        
    def __del__(self):
        print '-> 11 destruicao da instancia da Classe'
        
Linha 50: Linha 56:
    print '-> 10 condicional True'     print '-> 12 condicional True'
Linha 57: Linha 63:
print '-> 11 logo antes do if __main__' print '-> 13 logo antes do if __main__'
Linha 60: Linha 66:
    print '-> 12 __main__'     print '-> 14 __main__'
Linha 63: Linha 69:
    print '-> 13 __main__ (cont.)'     print '-> 15 __main__ (cont.)'
Linha 72: Linha 78:
    print '-> 14 __main__ (final)'
print '-> 15 FIM'
    class Local(object):
    
print '-> 16 bloco de declaracoes da classe Local'
    print '-> 17
__main__ (final)'
print '-> 18 FIM'
Linha 79: Linha 87:
Qual é o último marcador que aparece na saída quando o programa acima é executado? Quais são o penúltimo e o último marcadores que aparecem na saída quando o programa acima é executado?
Linha 85: Linha 93:

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'