Nessa aula estudaremos o Escopo de Nomes e continuar nosso estudo sobre os blocos de instrução. |
ESCOPO
O Escopo de Nome tem a função de classificar quais nome de variáveis, funções, classes estão acessíveis em cada bloco de instrução. O escopo, também é responsável por inutilizar variáveis declaradas e que não serão mais utilizadas, podendo assim, serem removidas da memória pela Máquina Virtual do Python.
Temos que enxergar o escopo de nomes como mini-programas, onde todas as variáveis declaradas são globais e restritas ao seu bloco. Um bloco de código que possua outros blocos de códigos, definirá um escopo de nomes para cada novo bloco definido e restringira os nomes ali definidos.
A seguir, temos um código bastante simples e que o Python não executa, isso porque, colocamos funções em blocos de instrução diferentes sem utilizarmos para isso, alguma estrutura que permitisse a utilização de diversos blocos.
#coding: utf-8
print()
print()
print()
Cada instrução print() foi utilizada num bloco de instrução novo, e por isso, possui seu escopo restrito. Se tivéssemos declarações de variáveis em cada bloco de instrução, estes seriam liberados quando o cursor de execução retornasse ao nível hierarquico anterior.
A seguir, temos outro código para demonstração que também não será executado, porém, que nos ajudará a entender melhor o escopo de nomes.
#coding: utf-8
a = 1
b = 2
c = 3
d = 4
d = 0
e = 5
f = 6
No código acima, declaramos várias variáveis em blocos de instrução diferentes. Caso o código compilasse sem problema, temos que todas as variáveis declaradas em escopos hierarquicamente a frente, seriam desalocadas quando o cursor de execução voltasse ao nível anterior. Assim, temos que todo escopo consegue enxergar os nomes declarados no bloco onde está contido, porém o contrário não é verdadeiro.
#coding: utf-8
a = 10
b = 20
c = 30
d = b + c #erro a variável c já foi liberada pelo Garbage Collector da VM do Python
No exemplo acima, caso fosse possível executar, haveria um erro na soma de b + c, isso porque, a variável c foi desalocada quando o cursor de execução voltou para o segundo nível hierarquico.
EXEMPLO FEITO EM AULA
#coding: utf-8
#=====================================
#========== www.eXcript.com ==========
#=====================================
a = 25
if(True):
a = 50
if(False):
b = 50
a = 40
Tags curso, python, escopo, blog
Comentários
comments powered by Disqus