Introducción al alcance en Python

El alcance define la accesibilidad del objeto python. Para acceder a la variable particular en el código, el alcance debe definirse ya que no se puede acceder desde cualquier parte del programa. La región de codificación particular donde las variables son visibles se conoce como alcance. Las variables no son visibles para todo el código, su visibilidad puede ser restringida. El alcance verifica qué variable se puede "ver". El alcance define el conjunto de reglas que nos dicen cómo y dónde se puede buscar una variable. La variable se busca para recuperar un valor o para asignar un valor. El espacio de nombres es la identificación única de la variable o el método. El espacio de nombres le dice al intérprete de Python sobre el nombre del objeto y la ubicación desde donde está intentando acceder a él.

Los espacios de nombres se buscan para la resolución del alcance de acuerdo con la regla LEGB. El LEGB significa: L: Local, E: Cerrado, G: Global, B: Incorporado. La secuencia de LEGB es importante. La variable se busca primero en Local, seguido de Cerrado, luego global y finalmente incorporada.

Tipos de alcance en Python

Estudiemos cómo declarar una variable y cómo acceder a su alcance:

1. Alcance local

Las variables que se definen en la función son un ámbito local de la variable. Estas variables se definen en el cuerpo de la función. Comprendamos este concepto con la ayuda de un ejemplo. En este ejemplo 1, hemos tomado una variable num. Num = 0 se define fuera de la función, por lo que no es una variable local. Según nuestra definición, las variables que se declaran dentro del cuerpo de la función son variables locales. Aquí num = 1 es una variable local que se declara e imprime dentro de la demostración de la función. Si ejecutamos este código, la salida se proporciona a continuación.

Ejemplo 1:

Código:

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

Salida:

Num es local para la función. Cuando usamos el valor de la variable num en la función antes de declararlo localmente, se genera un error.

Consulte el Ejemplo 2: Aquí, la primera declaración de impresión genera un error de Python ya que estamos intentando acceder a ella antes de la asignación.

Ejemplo # 2:

Código:

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

Salida:

2. Alcance global

La variable que se puede leer desde cualquier parte del programa se conoce como alcance global. Se puede acceder a estas variables dentro y fuera de la función. Cuando queremos usar la misma variable en el resto del programa, la declaramos global.

En el siguiente Ejemplo 1, hemos declarado una variable Str que está fuera de la función. Se llama a la demostración de la función e imprime el valor de la variable Str. Para usar una variable global dentro de una función, no es necesario usar la palabra clave global.

Ejemplo 1:

Código:

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

Salida:

En el siguiente ejemplo, 2 Intentamos cambiar el valor de la variable global Str dentro de la función, por eso provocó una excepción. Si modificamos o asignamos un nuevo valor a la variable dentro de la función, entonces debemos escribir global. Si desea decirle a un intérprete de Python que desea utilizar una variable global, se utiliza la palabra clave "global". Si no se ha declarado como global, python trata esa variable como local si se crea o modifica dentro de la función. En esta primera línea se produce una excepción porque python supone que queremos la asignación como una variable local debido a la asignación a str dentro de la función demo ().

Ejemplo # 2:

Código:

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

Salida:

Cuando queremos cambiar el valor de la variable global dentro de la función, se usa la palabra clave global.

El siguiente ejemplo 3 resolvió el problema que se encuentra arriba.

Ejemplo # 3:

Código:

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

Salida:

3. Alcance no local o envolvente

La variable no local es la variable que se define en la función anidada. Significa que la variable no puede estar ni en el ámbito local ni en el ámbito global. Para crear una variable no local se usa una palabra clave no local. En el siguiente código, creamos una función externa y hay una función anidada interna (). En el alcance de la función externa (), se define la función interna (). Si cambiamos la variable no local tal como se define en la función inner (), los cambios también se reflejan en la función externa.

Ejemplo 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()

Salida:

Si solo queremos usar el valor de la función externa y no queremos hacer ningún cambio, entonces comente la línea (no local a).

Ejemplo # 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()

Salida:

4. Alcance incorporado

Si una variable no está definida en el ámbito local, cerrado o global, python la busca en el ámbito incorporado. En el siguiente ejemplo, 1 del módulo matemático pi se importa y el valor de pi no se define en global, local y encerrado. Python luego busca el valor pi en el ámbito incorporado e imprime el valor. Por lo tanto, el nombre que ya está presente en el ámbito incorporado no debe utilizarse como identificador.

Ejemplo 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()

Salida:

Conclusión - Alcance en Python

En este artículo, aprendimos sobre el alcance variable de Python. Aprendimos cuatro tipos de alcance: alcance global, alcance local, alcance cerrado y alcance incorporado. También aprendimos cuándo usar palabras clave globales y no locales. Espero que hayas entendido este concepto.

Artículo recomendado

Esta es una guía de Scope en Python. Aquí discutimos los tipos de alcance en Python y sus ejemplos junto con la implementación y salida de código. También puede consultar nuestros otros artículos relacionados para obtener más información:

  1. Tuplas en Python con tipos
  2. Descripción general de la encapsulación en Python
  3. Alternativas a Python | Top 6
  4. Introducción a la herencia en Python