quinta-feira, 25 de outubro de 2012

Escopo de Variáveis em Python

Bom dia pessoal!

Hoje vamos falar de um assunto que tenho visto causar confusão em muitos programadores iniciantes: o escopo de variáveis em Python.

Em geral, temos dois tipos de escopos a considerar: escopo global e os escopos locais. Bom quando se programa orientado a objetos a complexidade destes escopos aumenta um pouco, então hoje veremos escopos de váriáveis num script Python simples.
A imagem abaixo ilustra como funcionam os escopos em Python. Vejamos.

O escopo 1 contém tudo que está na raiz do arquivo, sem identação. Este escopo possui as variáveis globais, que estarão disponíveis em qualquer parte do programa.

Além disto, tudo que está neste escopo será executado pelo interpretador imediatamente. Assim, as atribuições serão feitas a x e y e as funções serão definidas e posteriormente execudadas quando forem executadas suas chamadas.

O escopo 2 contém tudo que é definido dentro da função soma, assim, ali temos disponíveis as variáveis x e y do escopo global, mais as variáveis a, b e s, do escopo local. As variáveis locais a, b e s só são acessíveis de dentro desta função e morrem quando a função retorna.

O mesmo ocorre com o escopo 3, tem acessíveis as variáveis x e y do escopo global, mais a variável a do escopo local.

Já o escopo 4, além das variáveis x e y do escopo global, tem acessível a variável a do escopo 3 mais a variável local i. Se tentarmos usar a variável i depois do final do for, será levantada uma excessão, pois esta variável somente existe dentro do escopo 4.

Resumindo então, dentro de um escopo, temos sempre disponíveis todas as variáveis dos escopos que contém este escopo, por isso dentro do escopo 4 podemos acessar x e y. Por outro lado, nunca podemos acessar as variáveis dos escopos que pertencem ao escopo em questão. Assim, não podemos acessar outros escopos a partir do escopo 1, nem podemos acessar a variável i a partir do escopo 3, por exemplo.

Espero que a explicação tenha sido suficientemente clara e que ajude quem pudesse estar com problemas quanto a este aspecto da linguagem.

Qualquer dúvida ou sugestão, deixem um comentário ou mandem mensagem pela página de contato!

Muito obrigado e até a próxima!

========Edição========
Para se aprofundar na questão de escopos e resolver mais problemas relacionados a este assunto, acesse o artigo
Erros comuns para iniciantes em Python - parte 2

Nenhum comentário:

Postar um comentário