Como o Python gerencia globals?
Eu me deparei com algumas manipulações muito estranhas de variáveis globais no Python. Eu esperava que alguém pudesse explicar e justificar essas surpresas!
A) Este código imprime 10 conforme o esperado:
def func():
print(a)
a = 10
func()
B) Este código lança uma exceção sobre referenciamento muito cedo:
def func():
print(a)
a += 1
a = 10
func()
C) Mas esse código imprime [10] conforme o esperado:
def func():
print(a)
a.append(1)
a = [10]
func()
Então eu posso entender que o tipo dea
muda seu escopo e adicionalmente declarações posteriores que ainda nem foram alcançadas mudam comoa
é visto. Eu sei que posso usarglobal a
no início da função, mas é bastante detalhado.
Alguém pode me dizer quais regras o Python está usando para lidar com seu escopo bizarro?