O que é uma variável em Python
Uma variável é um nome que referencia um objeto na memória do computador. Em Python, as variáveis não possuem tipos fixos. O tipo pertence ao objeto ao qual a variável se refere.
x = 42
x = "agora é uma string"
Variáveis locais em Python
Definição de variáveis locais
Uma variável local é definida dentro de uma função e só pode ser acessada dentro dela. Após a execução da função, a variável local é removida da memória.
def say_hello():
name = "Python" # variável local
print("Olá,", name)
say_hello()
# print(name) # Erro: name não está definida
A variável name existe apenas dentro da função say_hello e não pode ser acessada fora dela.
Vantagens das variáveis locais
Variáveis locais garantem o isolamento dos dados e evitam alterações indesejadas em valores de outras partes do programa. Elas liberam memória automaticamente após a execução da função.
Variáveis globais em Python
O que são variáveis globais
Uma variável global é declarada fora de todas as funções e pode ser acessada em qualquer lugar do arquivo do programa. Essas variáveis mantêm seus valores durante toda a execução do programa.
language = "Python" # variável global
def show():
print("Idioma:", language)
show() # Idioma: Python
Problemas ao modificar variáveis globais
Ao tentar modificar uma variável global dentro de uma função, ocorre um erro:
counter = 0
def increment():
counter += 1 # UnboundLocalError!
O Python interpreta counter como uma variável local devido à operação de atribuição, mas ela não foi definida localmente.
A palavra-chave global
Usando global para modificar variáveis globais
A palavra-chave global permite modificar variáveis globais dentro de funções:
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1
Aplicação de global em operações matemáticas
total = 0
def add(x):
global total
total += x
add(10)
add(20)
print(total) # 30
Quando usar global
A palavra-chave global deve ser usada com cuidado, pois pode dificultar a depuração do programa e tornar o código menos legível.
Escopo de variáveis: a regra LEGB
Princípio de busca de variáveis
O Python busca variáveis seguindo a regra LEGB nesta ordem:
- L (Local) — dentro da função atual
- E (Enclosing) — em funções aninhadas
- G (Global) — no nível do módulo
- B (Built-in) — nomes internos do Python
Exemplo de funcionamento da regra LEGB
x = "global"
def outer():
x = "enclosing"
def inner():
x = "local"
print(x)
inner()
outer() # local
O Python encontra a variável x no escopo local e usa seu valor.
A palavra-chave nonlocal
Acessando variáveis de funções aninhadas
A palavra-chave nonlocal é usada para trabalhar com variáveis de escopos externos, mas não globais:
def outer():
count = 0
def inner():
nonlocal count
count += 1
return count
return inner
f = outer()
print(f()) # 1
print(f()) # 2
Diferenças entre global e nonlocal
A palavra-chave global trabalha com variáveis no nível do módulo, enquanto nonlocal lida com variáveis de funções externas dentro do mesmo escopo.