[Curso de Python] Escopo de Variáveis Parte 2
por
em 06-09-2010 às 12:13 (7064 Visualizações)
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...
Comentários
+ Enviar Comentário