Palabra clave no local de Python

La palabra clave no local de Python se usa para hacer referencia a una variable en el ámbito más cercano. La palabra clave no local no funcionará en variables locales o globales y, por lo tanto, debe usarse para hacer referencia a variables en otros ámbitos, excepto el global y el local. La palabra clave nonlocal se usa en funciones anidadas para hacer referencia a una variable en la función principal. 

Ventajas de no local:

  • Ayuda a acceder a la variable en el ámbito superior.
  • Dado que la variable referenciada se reutiliza, la dirección de memoria de la variable también se reutiliza y, por lo tanto, ahorra memoria.

Desventajas de no local:

  • La palabra clave nonlocal no se puede usar para hacer referencia a variables globales o locales.
  • La palabra clave no local solo se puede usar dentro de estructuras anidadas.

Demostración de variable no local:

Ejemplo 1: En este ejemplo, demostramos el funcionamiento de la palabra clave no local.

Python3

def foo():
    name = "geek" # Our local variable
 
    def bar():
        nonlocal name          # Reference name in the upper scope
        name = 'GeekForGeeks' # Overwrite this variable
        print(name)
         
    # Calling inner function
    bar()
     
    # Printing local variable
    print(name)
 
foo()
Producción

GeekForGeeks
GeekForGeeks

Ejemplo 2: En este ejemplo, vemos lo que sucede cuando hacemos que una variable no local se refiera a la variable global.

Python3

# Declaring a global variable
global_name = 'geekforgeeks'
 
 
def foo():
   
    # Defining inner function
    def bar():
       
        # Declaring nonlocal variable
        nonlocal global_name        # Try to reference global variable
        global_name = 'GeekForGeeks'# Try to overwrite it
        print(global_name)
         
    # Calling inner function
    bar()
     
foo()

Producción:

SyntaxError: no binding for nonlocal 'name' found

Ejemplo 3: En este ejemplo, veremos a qué variable no local se refiere cuando tenemos múltiples funciones anidadas con variables del mismo nombre.

Python3

def foo():
 
    # Local variable of foo()
    name = "geek"
 
    # First inner function
    def bar():
        name = "Geek"
 
        # Second inner function
        def ack():
            nonlocal name # Reference to the next upper variable with this name
            print(name)   # Print the value of the referenced variable
            name = 'GEEK' # Overwrite the referenced variable
            print(name)
 
        ack() # Calling second inner function
     
    bar() # Calling first inner function
    print(name) # Printing local variable of bar()
 
foo()
Producción

Geek
GEEK
geek

Ejemplo 4: en este ejemplo, construiremos un contador reutilizable (solo con fines de demostración)

Python3

# Our counter function
def counter():
  c = 0 # Local counter variable
   
  # This function manipulate the local c variable, when called
  def count():
    nonlocal c
    c += 1
    return c
   
  # Return the count() function to manipulate the local c variable on every call
  return count
 
# Assign the result of counter() to a variable which we use to count up
my_counter = counter()
for i in range(3):
  print(my_counter())
print('End of my_counter')
   
# Create a new counter
new_counter = counter()
for i in range(3):
  print(new_counter())
print('End of new_counter')
Producción

1
2
3
End of my_counter
1
2
3
End of new_counter

Nota: observe cómo la variable local c se mantiene viva en cada llamada de nuestras variables de contador.

Publicación traducida automáticamente

Artículo escrito por satyam00so y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *