Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Namespaces e Escopo de Variáveis em Python: Entendendo Nomes, Vinculações e Escopos

Namespaces e Escopo de Variáveis em Python

Explore como nomes, namespaces e escopos de variáveis funcionam em Python, com exemplos claros e boas práticas.

O que é um Nome em Python?

Em "The Zen of Python" (import this), a última linha diz: "Namespaces são uma ideia genial — vamos fazer mais disso!" Então, o que são esses namespaces? Primeiro, vamos definir um nome.

Um nome, ou identificador, é um rótulo que referencia um objeto. Tudo em Python é um objeto, e um nome fornece uma maneira conveniente de acessá-lo.

Por exemplo, quando executamos a = 2, o inteiro 2 é armazenado na memória e a torna-se sua referência. A função embutida id() retorna o endereço de memória de um objeto.

# Nota: seus valores id podem diferir a = 2 print('id(2) =', id(2)) print('id(a) =', id(a)) 

Saída

id(2) = 9302208 id(a) = 9302208

Ambos os nomes apontam para o mesmo objeto, então seus valores id() coincidem. Vamos ver o que acontece quando reatribuímos a:

# Nota: seus valores id podem diferir a = 2 print('id(a) =', id(a)) a = a + 1 print('id(a) =', id(a)) print('id(3) =', id(3)) b = 2 print('id(b) =', id(b)) print('id(2) =', id(2)) 

Saída

id(a) = 9302208 id(a) = 9302240 id(3) = 9302240 id(b) = 9302208 id(2) = 9302208

Quando a = a + 1 é executado, um novo objeto 3 é criado, e a agora o referencia. Observe que id(a) e id(3) são idênticos. A atribuição subsequente b = 2 simplesmente vincula b ao objeto existente 2, evitando armazenamento duplicado.

Este binding dinâmico de nomes é o que torna Python flexível: um único identificador pode apontar para valores de qualquer tipo—incluindo funções.

def imprimeOla(): print("Olá") a = imprimeOla a()

Saída

Olá

O identificador a agora referencia a função imprimeOla, que podemos invocar diretamente.


O que é um Namespace?

Um namespace é um mapeamento de nomes para objetos. Pense nele como um dicionário que mantém todo identificador que você definiu junto com seu objeto associado.

Python suporta múltiplos namespaces simultaneamente, cada um isolado dos outros. O interpretador cria um namespace global contendo todos os nomes embutidos que persiste pela vida da sessão. Cada módulo obtém seu próprio namespace global, e cada definição de função ou classe introduz um novo namespace local.


Escopo de variável em Python

Enquanto namespaces existem, o escopo determina onde um nome pode ser acessado sem qualificação.

Em qualquer momento, um programa tem pelo menos três escopos aninhados:

  1. O escopo local da função atualmente em execução.
  2. O escopo global do módulo.
  3. O escopo embutido que está sempre disponível.

Quando um nome é referenciado dentro de uma função, Python busca primeiro no namespace local, depois no global, e finalmente no embutido. Se uma função contém outra função, a interna introduz um novo escopo aninhado.


Exemplo: Interação de Escopo e Namespace

Considere o seguinte código:

def funcao_externa(): b = 20 def funcao_interna(): c = 30 a = 10

Aqui, a vive no namespace global do módulo. A variável b é local a funcao_externa, e c pertence ao namespace local aninhado de funcao_interna.

Dentro de funcao_interna, c é local, b é non-local, e a é global. Você pode ler e escrever c, mas apenas ler b e a a menos que os declare explicitamente com global ou nonlocal.

Aqui está uma ilustração mais concreta:

def funcao_externa(): a = 20 def funcao_interna(): a = 30 print('a =', a) funcao_interna() print('a =', a) a = 10 funcao_externa() print('a =', a)

A saída demonstra três vinculações distintas de a:

a = 30 a = 20 a = 10

Para forçar todas as atribuições ao a global, use a palavra-chave global:

def funcao_externa(): global a a = 20 def funcao_interna(): global a a = 30 print('a =', a) funcao_interna() print('a =', a) a = 10 funcao_externa() print('a =', a)

A saída agora reflete um único a global:

a = 30 a = 30 a = 30

Estes exemplos ilustram como as regras de namespace e escopo do Python governam visibilidade e mutação de variáveis.

python

  1. Palavras-chave e Identificadores em Python: Dominando Palavras Reservadas e Convenções de Nomenclatura
  2. Declarações, Indentação e Comentários em Python: Guia Claro
  3. Variáveis, Constantes e Literais em Python – Guia Completo
  4. Dominando Conversão e Casting de Tipos em Python: Guia Completo
  5. Dominando I/O e Importação de Módulos em Python: Guia Prático
  6. Dominando Operadores em Python: Guia Completo
  7. Entendendo Variáveis Globais, Locais e Nonlocal em Python
  8. Dominando Números, Conversão de Tipos e Matemática em Python
  9. Dominando Operações com Diretórios e Arquivos em Python
  10. Dominando Erros e Exceções Built-in do Python