Escopos de Variáveis em Python
Escopos de Variáveis em Python
Escopos de Variáveis em Python
Escopo Local
Uma variável local é uma variável criada dentro de uma função, no programa esta variável
só é visível dentro da função, ou seja, você não vai conseguir manipular esta variável em
qualquer parte do programa que não seja a função onde ela está contida.
Para exemplificar, imagine o programa como uma caixa fechada, você só consegue interagir
com programa de dois modos: passar uma informação para o programa através de uma
entrada de dados “input” de variáveis (valor numérico, caractere etc.) ou receber o
resultado “output” através de um print por exemplo.
Agora pense na função também como uma caixa, só que esta caixa (função) está dentro da
caixa maior que é nosso programa. Lembre se que a caixa função também está fechada
impossibilitando o programa saber o que tem dentro dela. Esta caixa (função) assim como
a caixa (programa), só possibilita dois modos de interação, input através de argumentos,
e o output que é retorno da função. Por isso, podemos dizer que as variáveis dentro de
uma função são locais, só existem no contesto da função e não são visíveis ao programa
principal. Este conceito tem o nome de encapsulamento
Concluindo, variáveis locais são inicializadas a cada nova chamada à função. Desta forma,
não é possível acessar seu valor fora da função onde ela foi declarada. Para que possamos
interagir com variáveis locais, passamos parâmetros e retornamos valores nas funções.
Escopo Global
Uma variável global é declarada fora das funções e pode ser acessada por todas as
funções presentes, ou seja, ela é visível para todas as partes do programa, no módulo
onde é definida. Variáveis globais também podem ser acessadas por outros módulos, caso
eles importem o módulo onde a variável foi definida.
def escreveTexto():
VAR_LOCAL="Estrutura de dados"
print("Executando a função escreveTexto:")
print("Variável global: ", VAR_GLOBAL)
print("Variável local: ", VAR_LOCAL)
escreveTexto()
Vejamos a Saída:
Vixi deu pau, e agora? Se olharmos a penúltima linha veremos a seguinte mensagem :
“NameError: name 'VAR_LOCAL' is not defined”. O compilador está dizendo que
esta variável não foi declara no programa.
Mas como assim? É logico que está, estou vendo-a bem ali! dentro da função, porque o
programa está retornado este erro?
Pense um pouco padawan ... Acho que já descobriu né.
Isso mesmo, a variável “VAR_LOCAL” só existe no escopo da função escreveTesto(), ela
é uma variável local dentro da função, o programa principal não sabe que esta variável
existe, lembra das caixas?
Devemos usar variáveis globais com muito cuidado, pois dificultam o entendimento do
código e violam o encapsulamento das funções, podendo ser alteradas por qualquer
função, sem que seja simples saber quem a alterou.
def escreveTexto():
VAR_GLOBAL = "Fatec São Paulo"
VAR_LOCAL = "Estrutura de dados"
print("Variável global: ", VAR_GLOBAL)
print("Variável local: ", VAR_LOCAL)
Na saída temos:
Percebe-se que a variável VAR_GLOBAL é alterada dentro da função, mas seu valor não
é alterado quando é chamada novamente fora da função.
Se tentarmos alterar o valor de uma variável global dentro de uma função, será criada na
verdade uma nova variável local com o mesmo nome da global definida fora da função.
Devemos tomar cuidado com esse comportamento, pois pode ocasionar erros graves na
execução do programa.
Para que uma variável global tenha seu valor alterado dentro de uma função, devemos
lançar mão da declaração global ao declará-la (e antes de inicializá-la!).
def escreveTexto():
global VAR_GLOBAL
VAR_GLOBAL="Fatec Ourinhos"
VAR_LOCAL="Estrutura de Dados"
print("Variável global: ", VAR_GLOBAL)
print("Variável local: ", VAR_LOCAL)
Obs.: Não devemos usar a palavra global na mesma linha onde é atribuído o novo valor à
variável global dentro da função.