Funções em Python – Escopos de Variáveis
Escopos de Variáveis em Python
O escopo de uma variável indica sua visibilidade – ou seja, a partir de onde, no código, a variável é acessível.
Temos dois escopos para variáveis em Python:
- Escopo Global
- Escopo Local
Escopo Local
Uma variável local (criada dentro de uma função) existe apenas dentro da função onde foi declarada.
As 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 (criada) fora das funções e pode ser acessada por todas as funções presentes 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.
Uma aplicação útil de variáveis globais é o armazenamento de valores constantes no programa, acessíveis a todas as funções.
Sempre devemos tomar cuidado ao alterar o valor de uma global dentro de uma função. Se for atribuído valor a ela, será na verdade criada uma nova variável, local, com o mesmo nome da global.
Exemplo de variáveis globais e locais
VAR_GLOBAL="Bóson Treinamentos em Tecnologia" def escreve_texto(): VAR_LOCAL="Fábio dos Reis" print("Variável global: ", VAR_GLOBAL) print("Variável local: ", VAR_LOCAL) print("Executando a função escreve_texto:") escreve_texto() print("Tentando acessar as variáveis diretamente:") print("Variável global: ", VAR_GLOBAL) print("Variável local: ", VAR_LOCAL)
Devemos usar variáveis globais com muito cuidado, pois dificultam o entendimento do código e violam o encapsulamento das funções, podendo serem alteradas por qualquer função, sem que seja simples saber quem a alterou.
Alterando variáveis globais
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.
Vejamos um exemplo:
VAR_GLOBAL="Bóson Treinamentos em Tecnologia" def escreve_texto(): VAR_GLOBAL="Planeta Unix" VAR_LOCAL="Fábio dos Reis" print("Variável global: ", VAR_GLOBAL) print("Variável local: ", VAR_LOCAL) print("Executando a função escreve_texto:") escreve_texto() print("Tentando acessar as variáveis diretamente:") print("Variável global: ", VAR_GLOBAL)
Note o problema: VAR_GLOBAL é alterada dentro da função, mas seu valor permanece o mesmo quando chamada novamente fora da função.
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!).
Veja como fica a função modificada:
def escreve_texto(): global VAR_GLOBAL VAR_GLOBAL="Planeta Unix" VAR_LOCAL="Fábio dos Reis" 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.
Que versão de python usou no exemplo?
Python 3.6 amigo