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.