Python Tutorial - Namescape and Scope

  1. Nome em Python
  2. Namespace em Python
  3. Escopo da variável em Python
  4. Usando o Scope e o Namespace em Python

Nesta seção, você aprenderá o namespace e o escopo de uma variável na programação Python.

Nome em Python

Um nome em Python é um identificador dado ao objeto. Python é uma linguagem de programação orientada ao objeto, o que significa que tudo é um objeto em Python e os nomes são usados para acessar objetos.

Por exemplo, quando se atribui um valor a uma variável x = 3. Aqui 3 é um objeto e é armazenado em um local de memória (RAM). Esta localização de memória é uma localização de memória nomeada que poderia ser acessada pelo nome x. O endereço deste objeto (3) pode ser obtido utilizando a função embutida id().

x = 3
print('id(3) =', id(3))
print('id(x) =', id(x))
id(3) = 1864160336
id(x) = 1864160336

Agora aqui o objeto 3 é armazenado em um local cujo nome é x e, portanto, o endereço de ambos é o mesmo.

Quando você atribui o valor de x a alguma outra variável vamos dizer y e alterar o valor de x, então x terá uma nova localização e y terá a localização do x anterior. Isto é demonstrado abaixo:

x = 3
print('id(x) =', id(x))
x = 4
print('id(4) =', id(4))
print('id(x) =', id(x))
y = 3
print('id(y) =', id(y))
id(x) = 1864160336
id(4) = 1864160352
id(x) = 1864160352
id(y) = 1864160336

Você pode ver aqui o endereço de y é igual ao do antigo x.

Namespace em Python

Um namespace é uma coleção de nomes. Um namespace é um mapeamento de nome para um objeto e é implementado como um dicionário em Python. Namespaces garantem que cada nome usado em um programa é único.

Namespaces são criados quando o interpretador é iniciado, apagados quando a execução do programa é concluída. Este namespace contém todos os nomes incorporados, assim sempre que você precisar de uma função incorporada, por exemplo id() você pode utilizá-la diretamente no seu programa.

Quando você chama uma função, é criado um espaço de nomes local que contém todos os nomes definidos.

Escopo da variável em Python

Quando você cria uma variável no seu programa, você pode não ter acesso a essa variável a partir de cada parte do programa. Isto é por causa do escopo das variáveis. Você tenta acessar variáveis a partir do namespace onde elas não estão definidas.

Um escopo pode ser definido como um lugar de onde você pode acessar seu espaço de nomes sem nenhum prefixo.

O escopo pode ser categorizado como:

  1. O escopo de uma função onde você tem nomes locais.
  2. Escopo de um módulo onde você tem variáveis globais.
  3. Escopo mais externo onde você tem nomes incorporados.

Quando você cria uma referência dentro de uma função, ela é procurada primeiro no namespace local e depois é procurada no namespace global; se não for encontrada em nenhum lugar, ela será procurada no namespace embutido.

Ao criar uma função aninhada, você terá um novo escopo dentro do escopo local.

Usando o Scope e o Namespace em Python

def outer():
    x = 12
    def inner():
        y = 13
z = 14

Aqui, uma função aninhada é definida (função dentro de outra função). A variável y está no namespace local aninhado da função interna, a variável x está no namespace local da função externa e a variável z está no namespace global.

Quando ela está dentro da função interna, a variável y é uma variável local, x é não-local e z é global. A função interna não tem acesso às variáveis não-locais x e globais z.