Alguém pode explicar como escopos funcionam em python Ipensei que eu entendi, mas há uma coisa que eu não entendo. Neste exemplo 1 eu uso a palavra-chave global para acessar variáveis globais, mas e se você definir uma variável, xem uma função função, tente acessar essa variável em outra função, sub função, que é definido na função principal (exemplo 2).
Exemplo 1
x = 10
def function():
def sub_function():
global x
x += 1
sub_function()
function()
Exemplo 2
def function():
x = 10
def sub_function():
x += 1
sub_function()
function()
isso dá erro "UnboundLocalError: variável local" x "referenciada antes da atribuição"
Eu assumi que desde que x está em função () écriado em alguma pilha e só é removido após funcition () sai do escopo. sub_function () está no escopo de function (), então x ainda deve estar disponível.
Atualizar Eu entendo que python precisa da palavra-chave global para se referir a uma variável global para modificá-lo. Mas o que acontece se a variável não é global, mas não no meu escopo. Basicamente x no exemplo 2 não é global ... é isso?
Respostas:
0 para resposta № 1O problema é que o Python, por padrão, permite que você leia variáveis definidas no escopo pai, desde que você não tente sobrescrevê-las.
def function():
x = 10
def sub_function():
x = x + 1 # here Python is not really sure if you want
# to define the x variable in local scope or
# you"re trying to modify the global variable.
# Since you"re mutating the variable, Python assumes
# that x must be local variable which you forgot to
# define.
y = x + 1 # would raise no error.
Em Python 3x você pode usar nonlocal
construir, mas no Python 2x a única opção é usar uma variável mutável dizer x = [10]
ou copie x
em outra variável de escopo local.
def function():
x = 10
def sub_function():
y = x # create an alias of x for mutable variables
y = y + 1 # would raise no error