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 2

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

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Na última aula tivemos uma breve introdução sobre os escopo de variáveis, hoje veremos mais características do escopo global.


Escopo de Variáveis Parte 2



O escopo global vale para todo o programa e pode ser acessado por qualquer trecho de código. Vamos ver alguns exemplos de saída do comando globals() em determinadas estruturadas de código:

Código python:
>>> x = 1
>>>
>>> def teste():
...     print globals().keys()
...
>>>
>>> teste()
['__builtins__', '__package__', 'teste', 'x', '__name__', '__doc__']
>>>

Como podemos ver, ao chamar a função o comando globals mostra a variável x criada "fora" da função. Logo deduzimos que podemos acessar a variável, conseqüentemente achamos que podemos alterar as variáveis. Vamos a um exemplo:

Código python:
>>> x = 1
>>>
>>> def mostra_x():
...     print 'x dentro da funcao:',x
...
>>> altera_x()
x dentro da funcao: 1

Como imaginamos, o x foi acessado com sucesso de dentro da variável, agora vamos ver um exemplo de alteração da variável x:

Código python:
>>> x = 1
>>>
>>> def altera_x():
...     x = 10
...     print 'x:',x
...
>>> print 'x:',x
x: 1
>>> altera_x()
x: 10
>>> print 'x:',x
x: 1
>>>

Aqui começamos a nos confundir, se eu consegui mostrar o valor de x, porque ao alterar o x, ele continua como 1. Pensando um pouco mais, como dentro da função eu consegui atribuir o valor 10 à variável x? Novamente, tudo isso é culpa do escopo. Vamos usar o comando globals() para visualizar a variável x:

Código python:
>>> x = 1
>>> def altera_x():
...     print globals()
...     x = 10
...     print '\nx alterado:',x
...     print '\n'
...     print globals()
...
>>> print 'x:',x
x: 1
>>> altera_x()
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'teste'
: <function teste at 0x00B410F0>, 'x': 1, '__name__': '__main__', 'altera_x': <f
unction altera_x at 0x00B41030>, '__doc__': None}
 
x alterado: 10
 
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'teste'
: <function teste at 0x00B410F0>, 'x': 1, '__name__': '__main__', 'altera_x': <f
unction altera_x at 0x00B41030>, '__doc__': None}
>>>
>>> print 'x:',x
x: 1
>>>

Pronto, agora podemos ver que no início da função o valor de x é 1 (saída da função globals()). Quando alteramos o valor de x, chamamos o print que mostra o valor de x como sendo 10. Na segunda chamada da função globals podemos ver que x ainda é 1. Então fica a pergunta, que x é aquele que alteramos? A resposta é simples: é um x local!

Sim, isso mesmo! É um x local. Complicou, ne?! Por enquanto vamos deixar, isso será explicado com mais calma quando falarmos de escopo local. Vamos apenas aprender como alterar o valor do x global:


Código python:
>>> x = 1
>>>
>>> def altera_x():
...     global x
...     print 'valor global:',x
...     x = 10
...     print 'valor global:',x
...
>>>
>>> print 'x:',x
x: 1
>>> altera_x()
valor global: 1
valor global: 10
>>> print 'x:',x
x: 10
>>>

Pronto, utilizando a chamada global x podemos "ter acesso" ao valor global de x e alterá-lo.

Ok, por hoje é só pessoal. Com certeza deve ter muita gente perdida nessa aula. Vamos deixar esse conceito "assentar" na mente e continuaremos na próxima aula! Até mais...

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

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.