Ao escrever funções, podemos ter variáveis que são declaradas dentro do corpo de uma função. Por exemplo, se uma variável name é declarada na função, ela é considerada uma nova variável, que é totalmente diferente da que foi declarada fora da função:
name = 'Helen'
def greet():
name = 'Bob'
print('Hi', name)
greet() # Hi Bob
print('Outside:', name) # Outside: Helen
A variável name é declarada na função greet() e seu escopo dura até o fim da função. Variáveis declaradas dentro de um escopo geralmente são chamadas de variáveis locais. Assim que o programa sai da função, ele "esquece" essa variável.
Para acessar e modificar variáveis fora do escopo atual, podemos usar a palavra-chave global para dizer ao Python que queremos tratar essa variável como global:
name = 'Helen'
def greet():
global name
name = 'Bob'
print('Hi', name)
greet() # Hi Bob
print('Outside:', name) # Outside: Bob
Desta vez, a função greet() modificou a variável global name e mudou seu valor para Bob.
Desafio
Dada a seguinte função, tente encontrar o erro e corrigi-lo. A função deve retornar a soma dos valores passados para ela até agora.
total = 0
def compute_sum(val):
total = total + val
return val
print(compute_sum(10))
print(compute_sum(20))
print(compute_sum(30))