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 -
- Tuplas em Python com Tipos
- Visão geral do encapsulamento em Python
- Alternativas em Python | 6 principais
- Introdução à herança em Python