Scope de uma variável em Python
Quando uma variável é criada dentro de uma função essa variável só pode ser acessada dentro dessa função. Para outras funções essa variável não existe.
Variável local
Uma variável criada dentro de uma função existe somente dentro dessa função. Isso quer dizer que para alterar o valor dessa variável o código deve pertencer a mesma função da variável.
Exemplo
As funções dentro de funções podem acessar as variáveis da mesma função a qual a função pertence. Imagine que a função e a variável estão no mesmo nível. Por isso a função pode “ver” a variável. A variável está no seu scope.
def funcao():
a = 42
if 'a' in locals():
print('A variável a existe!')
if 'a' in locals():
print('A variável a existe!')
else:
print('A variável a não existe')
funcao()
a = 42
if 'a' in locals():
print('A variável a existe!')
if 'a' in locals():
print('A variável a existe!')
else:
print('A variável a não existe')
funcao()
Exemplo
def foo():
a = 42
def mostrar():
print(a)
mostrar()
foo()
a = 42
def mostrar():
print(a)
mostrar()
foo()
Variável global
Uma variável global pode ser acessada em qualquer parte do programa. Elas podem ser acessadas dentro de funções e classes. As variáveis globais ao visíveis em qualquer parte do programa.
Exemplo
# scope global
answer = 42
def ask():
# scopo local
a = 'O significado da vida, do universo e tudo mais é '
print(a + str(answer))
ask()
answer = 42
def ask():
# scopo local
a = 'O significado da vida, do universo e tudo mais é '
print(a + str(answer))
ask()
Palavra reservada global
Também é possível declarar uma variável dentro de uma função ou classe como uma variável global. Para isso é utilizada a palavra reservada global. Com essa declaração a variável passar ater um scope global, podendo ser acessada por todo o programa.
Exemplo
Repare que nesse exemplo a função foo deve ser chamada antes de tentar acessar o valor de a. Enquanto a função foo não for executada a variável global a não existe. Somente a partir da execução da função é que a variável global passa a existir.
def foo():
global a
a = 42
print(a)
foo()
# fora do sope da função foo
print(a)
global a
a = 42
print(a)
foo()
# fora do sope da função foo
print(a)
Variáveis com o mesmo nome
Normalmente não é permitido duas variáveis com o mesmo nome. Mais duas variáveis com o mesmo nome e com scope diferentes isso é possível. Como uma variável local não existe para um bloco de código diferente uma variável é independente da outra.
Exemplo
Quando a variável a é acessada dentro da função foo o seu valor será 80, pois a função procura a variável no scope local e só depois no scope global.
# scope global
a = 8
def foo():
# scope local
a = 80
print(a)
foo()
print(a)
a = 8
def foo():
# scope local
a = 80
print(a)
foo()
print(a)
0 comentários:
Postar um comentário