Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
 Voltar a Blog
Tela cheia

[Curso de Python] Escopo de Variáveis Parte 3

9 de Setembro de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 225 vezes

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Na última aula vimos mais sobre variáveis globais, hoje vamos ver um pouco sobre as variáveis locais e onde elas ocorrem.

Escopo de Variáveis Parte 3



Como eu disse anteriormente as variáveis globais (de escopo global) podem ser utilizadas em qualquer parte do código. Para acesso como "leitura" da variável global basta referenciá-la normalmente. Já para "escrever" na variável é necessário "declara-la" como global utilizando o comando global.

Muitas pessoas tem dificuldade de entender o escopo global. Eu costumo dizer que para entender e saber usar o escopo global você tem que entender o escopo local. Mas então porque eu não expliquei o escopo local antes? Simples, porque para entender o escopo local você precisa ter passado pelo escopo global.

O que eu quis dizer é que sesse conteúdo é algo que você não consegue estudar linearmente. Depois de estudar o escopo local é altamente recomendado que vocês voltem e estudem o escopo global.

Mas o que é o escopo de variáveis locais? Escopo local (ou variáveis locais) são variáveis que existem somente "dentro" de um certo trecho de código. Diferentemente das variáveis globais, uma variável local só pode ser acessada pelo trecho de código "responsável" por ela. Na aula passada eu havia comentado que existe apenas um escopo global, mas podem existir diversos escopos locais.

Mas então, que trechos de códigos "criam" escopos locais? Somente funções e métodos de classe. Vamos ver como consultar o escopo de variáveis locais do seu programa:

Código python:
>>> x = 1
>>> texto = 'teste'
>>>
>>> locals().keys()
['__builtins__', 'texto', '__package__', 'x', '__name__', '__doc__']
>>>
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 1, '__name__': '__main__', '__doc__': None}
>>>

Como podemos ver o escopo local é idêntico ao escopo global pois não estamos dentro de uma função. Segue a comparação:
Código python:
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 1, '__name__': '__main__', '__doc__': None}
>>>
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 1, '__name__': '__main__', '__doc__': None}
>>>

Como dito, o escopo local será diferenciado somente dentro de funções e métodos de classe. Como ainda não vimos orientação a objeto, utilizarei somente funções nos exemplos.

Código python:
>>> teste()
>>> def teste():
...  print locals()
...
>>>
>>> teste()
{}
>>>


Como podemos ver, o retorno da função locals() dentro da função teste retorna um dicionário vazio. Vamos ver aquele exemplo da aula passada:


Código python:
>>> x = 1
>>> def altera_x():
...     print 'variaveis locais:',locals()
...     x = 10
...     print 'variaveis locais:',locals()
...
>>> print 'x é',x
x é 1
>>> altera_x()
variaveis locais: {}
variaveis locais: {'x': 10}
>>> print 'x ainda é',x
x ainda é 1
>>>


Como podemos ver, depois de "tentar" atribuir um valor ao x, é criada uma variável local. Essa variável só existe dentro da função, ela é destruída assim que a função acaba de ser executada. Dessa forma temos que tomar cuidados extra ao criar variáveis dentro de funções e métodos de classes, pois eles estão restritos àquele trecho de código.

Se sua intenção é "repassar algo" obtido dentro de uma função para outro trecho de código, você pode usar variáveis globais, mas isso é altamente desencorajado e considerado uma má prática. O método correto é você retornar o valor de interesse.

É isso ai pessoal, pratiquem esses conceitos pois eles são essenciais. Até mais...

Fonte: http://under-linux.org/blogs/magnun/%5Bcurso-de-python%5D-escopo-de-variaveis-parte-3-2226/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.