Ver Feed RSS

root@blog:/# chmod o+r *

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

Avalie este Post de Blog

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 altera_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...

Atualizado 21-11-2010 em 22:56 por Magnun

Categorias
Artigos , Artigos , Cursos , Curso de Python

Comentários

  1. Avatar de zamperlini
    Olá Magnum!
    Descobri seu curso a algumas semanas e comecei a segui-lo. Estou adorando! No passado já programei um pouquinho em Pascal, VB, Delphi e C superficialmente. Agora estava procurando uma idéia como a sua para me aliar. Python tem se mostrado pra mim, através do seu curso, como uma linguagem bem tranquila de se trabalhar. Como uma boa linguagem de alto nível, o raciocínio lógico se converte em código de uma forma bastante direta. Obrigado pelo curso!
    Gostaria apenas de comentar um pequeno engano, provavelmente de digitação: quando você definiu a função mostra_x(), no mesmo código você fez a chamada da função altera_x(), não criada até aquele momento.
    Um grande abraço! Aguardo ansioso pelo anúncio do seu projeto. Quem sabe poderei auxiliar de alguma forma?
  2. Avatar de Magnun
    Olá zemperlini,

    Obrigado por acompanhar esse curso! Ele ainda é um trabalho em andamento e não está concluído, então fique atento às atualizações. Realmente foi um erro meu,a função deveria se chamar altera_x, abrigado pelo alerta! Atualmente estou enrolado com alguns projetos Python+GTK. Se quiser participar é só entrar em contato.

    Até mais...
  3. Avatar de fabraga
    Cara, vc sabe explicar as coisas de forma bem mastigada. Com isso fica quase impossível termos alguma dúvida. Parabéns! (e obrigado!)

+ Enviar Comentário