segunda-feira, 30 de março de 2020

Scope de uma variável em Python

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
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()
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.
Exemplo
def 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()

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
def foo():
  global a
  a = 42
  print(a)

foo()

# fora do sope da função foo
print(a)
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.

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
# scope global
a = 8
def foo():
  # scope local
  a = 80
  print(a)

foo()

print(a)
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.

0 comentários:

Postar um comentário