Introdução ao escopo em Python

O escopo define a acessibilidade do objeto python. Para acessar a variável específica no código, o escopo deve ser definido, pois não pode ser acessado de qualquer lugar do programa. A região de codificação específica em que as variáveis ​​são visíveis é conhecida como escopo. As variáveis ​​não são visíveis para todo o código, sua visibilidade pode ser restrita. O escopo verifica qual variável pode ser 'vista'. Escopo define o conjunto de regras que nos dizem como e onde uma variável pode ser pesquisada. A variável é pesquisada para recuperar um valor ou para atribuir valor. Espaço para nome é a identificação exclusiva da variável ou do método. O espaço para nome informa o intérprete python sobre o nome do objeto e o local de onde ele está tentando acessá-lo.

Os namespaces são pesquisados ​​quanto à resolução do escopo, de acordo com a regra LEGB. O LEGB significa: L: Local, E: Incluído, G: Global, B: Integrado. A sequência do LEGB é importante. A variável é pesquisada primeiro em Local, seguida por Fechado, depois global e finalmente integrada.

Tipos de escopo em Python

Vamos estudar como declarar uma variável e como acessar seu escopo:

1. Escopo Local

As variáveis ​​definidas na função são um escopo local da variável. Essas variáveis ​​são definidas no corpo da função. Vamos entender esse conceito com a ajuda de um exemplo. Neste exemplo 1, pegamos uma variável num. Num = 0 é definido fora da função, portanto não é uma variável local. Conforme nossa definição, as variáveis ​​declaradas dentro do corpo da função são uma variável local. Aqui num = 1 é uma variável local que é declarada e impressa na demonstração da função. Se rodarmos esse código, a saída será dada abaixo.

Exemplo 1:

Código:

num=0
def demo():
#print(num)
num=1
print("The Number is:", num)
demo()

Resultado:

Num é local para a função. Quando usamos o valor da variável num na função antes de declará-la localmente, gera um erro.

Consulte o Exemplo 2: Aqui, a primeira declaração de impressão gera um erro de python enquanto tentamos acessá-lo antes da atribuição.

Exemplo 2:

Código:

num=0
def demo():
print(num) //Raises an Error
num=1
print("The Number is:", num)
demo()

Resultado:

2. Escopo Global

A variável que pode ser lida de qualquer lugar do programa é conhecida como escopo global. Essas variáveis ​​podem ser acessadas dentro e fora da função. Quando queremos usar a mesma variável no restante do programa, a declaramos global.

No exemplo 1 a seguir, declaramos uma variável Str que está fora da função. A demonstração da função é chamada e imprime o valor da variável Str. Para usar uma variável global dentro de uma função, não há necessidade de usar a palavra-chave global.

Exemplo 1:

Código:

def demo():
print(Str)
# Global
Str = "You are clever"
demo()

Resultado:

No exemplo a seguir, 2 Tentamos alterar o valor da variável global Str dentro da função, por isso ela gerou uma exceção. Se modificarmos ou atribuirmos um novo valor à variável dentro da função, devemos escrever global. Se você quiser dizer a um intérprete python que deseja usar uma variável global, a palavra-chave "global" será usada. Se não foi declarado como global, o python tratará essa variável como local se for criada ou modificada dentro da função. Nesta primeira linha, lança uma exceção porque o python assume que queremos atribuir como uma variável local devido à atribuição a str dentro da função demo ().

Exemplo 2:

Código:

def demo():
print(Str)
Str = "You are smart"
print(Str)
# Global scope
Str = "You are Clever"
demo()
print(Str)

Resultado:

Quando queremos alterar o valor da variável global dentro da função, a palavra-chave global é usada.

O exemplo a seguir 3 resolveu o problema encontrado acima.

Exemplo 3:

Código:

def demo():
global Str
print(Str)
Str = "You are smart"
print(Str)
# Global scope
Str = "You are Clever"
demo()
print(Str)

Resultado:

3. Escopo Não Local ou Anexo

Variável não-local é a variável definida na função aninhada. Isso significa que a variável não pode estar no escopo local nem no escopo global. Para criar uma variável não-local, é usada uma palavra-chave não-local. No código a seguir, criamos uma função externa e há uma função aninhada inner (). No escopo da função outer (), a função inner () é definida. Se alterarmos a variável não-local, conforme definida na função inner (), as alterações também serão refletidas na função externa.

Exemplo 1:

Código:

def func_outer():
x = "local"
def func_inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
func_inner()
print("outer:", x)
func_outer()

Resultado:

Se apenas queremos usar o valor da função externa e não queremos fazer alterações, comente a linha (não local a).

Exemplo 2:

Código:

def func_outer():
a = "local"
def func_inner():
#nonlocal a
a = "nonlocal"
print("inner:", a)
func_inner()
print("outer:", a)
func_outer()

Resultado:

4. Escopo Integrado

Se uma variável não estiver definida no escopo local, fechado ou global, o python procurará por ela no escopo interno. No exemplo a seguir, 1 do módulo matemático pi é importado e o valor de pi não é definido em global, local e fechado. O Python, em seguida, procura o valor pi no escopo interno e imprime o valor. Portanto, o nome que já está presente no escopo interno não deve ser usado como um identificador.

Exemplo 1:

Código:

# Built-in Scope
from math import pi
# pi = 'Not defined in global pi'
def func_outer():
# pi = 'Not defined in outer pi'
def inner():
# pi = 'not defined in inner pi'
print(pi)
inner()
func_outer()

Resultado:

Conclusão - Escopo em Python

Neste artigo, aprendemos sobre o escopo da variável python. Aprendemos quatro tipos de escopo - escopo global, escopo local, escopo fechado e escopo interno. Também aprendemos quando usar palavras-chave globais e não locais. Espero que você tenha entendido esse conceito.

Artigo recomendado

Este é um guia para o escopo em Python. Aqui discutimos os tipos de escopo em Python e seus exemplos, juntamente com a implementação e saída de código. Você também pode consultar nossos outros artigos relacionados para saber mais -

  1. Tuplas em Python com Tipos
  2. Visão geral do encapsulamento em Python
  3. Alternativas em Python | 6 principais
  4. Introdução à herança em Python