Gerir o âmbito das variáveis
Tip
Consulte a guia Texto e imagens para obter mais detalhes!
Scope é a região do teu código onde existe uma variável e pode ser usada. Compreender o âmbito ajuda-te a escrever funções que não interfiram acidentalmente umas com as outras — e ajuda a evitar toda uma classe de bugs confusos.
Variáveis locais
Uma variável criada dentro de uma função é uma variável local. Só existe enquanto a função está a correr e não pode ser vista de fora da função.
def calculate_total(price, tax):
total = price + tax # `total` is local to this function
return total
calculate_total(10, 2)
print(total) # NameError: name 'total' is not defined
Cada chamada a uma função tem o seu próprio conjunto de variáveis locais, por isso as funções não sobrescrevem acidentalmente os dados umas das outras.
Variáveis globais
Uma variável criada fora de qualquer função é uma variável global. As funções conseguem ler variáveis globais, mas por defeito não as podem alterar .
message = "Hello"
def greet():
print(message) # Reading a global variable is fine
greet() # Output: Hello
Se tentar atribuir um novo valor a uma variável que também existe globalmente, o Python trata-a como uma nova variável local — o valor do global é deixado intacto.
color = "blue"
def change_color():
color = "red" # This creates a new local variable, not the global one
change_color()
print(color) # Output: blue
A global palavra-chave (usar com moderação)
Se realmente precisar de alterar uma variável global a partir de dentro de uma função, pode declará-la com a global palavra-chave:
count = 0
def increment():
global count
count = count + 1
increment()
print(count) # Output: 1
No entanto, modificar os globais a partir de funções internas torna o código mais difícil de seguir e mais difícil de testar. Um padrão melhor é passar o valor como um parâmetro e devolver o valor atualizado:
def increment(count):
return count + 1
count = 0
count = increment(count)
print(count) # Output: 1
Porque é que o âmbito é importante
- As variáveis locais mantêm as funções independentes — uma variável numa função não pode prejudicar outra.
- Não há problema em aceder a variáveis globais quando se trata de constantes, como os valores de configuração.
- Escrever em variáveis globais dentro de funções é uma fonte comum de bugs difíceis de detetar. Prefira parâmetros e valores de retorno.