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