Comprender las variables globales, locales y no locales en Python

En el mundo de la programación, si desea realizar cualquier operación, las variables son las primeras que entran en escena. Una variable es algo que ocupa memoria y se usa para almacenar diferentes valores de datos para su uso posterior en un programa.

Ahora el punto es que puede haber diferentes tipos de variables como variables globales, locales y no locales en Python.

Y si está confundido acerca de las diferencias entre estas variables globales, locales y no locales en Python, no se preocupe, este artículo es para usted.

Repasaremos todas las «Variables globales, locales y no locales en Python» en profundidad aquí.

Aprende más de python con estos temas:

Variables globales

¿Qué entendemos por Global?

Simplemente significa que algo no está limitado a un cierto ámbito.

  • Y también lo son las variables globales que no se limitan a una función particular del programa.
  • Estas son variables que en realidad se pueden usar dentro o fuera de cualquier función del programa.
  • Por lo tanto, las variables globales tienen un alcance global y no se declaran dentro de ninguna función en particular.
  • Las variables globales generalmente se crean al comienzo de un programa, es decir, en la parte superior de un programa.

Ahora, veremos cómo crear y acceder a una variable global en Python.

Crear y acceder a variables globales

Una declaración de variable global estará fuera de todos los bloques de programa.

Por ejemplo:

x = "CodingNinjas"

def main():
    print("x inside:", x)

#calling main function
main()
print("x outside:", x)

Salida para variables globales:

x inside: CodingNinjas
x outside: CodingNinjas

x es la variable global en el código Python anterior.

¿Qué nos da tanta confianza?

  • Para generar el valor xa dentro de la función principal, creamos una función main().
  • Después de eso, la declaración de impresión fuera del valor principal generará el valor de x.
  • Y ambos producen los mismos resultados.

Por lo tanto, x es una variable global porque su valor es independiente de cualquier función y puede usarse en cualquier parte del código.

Entonces, ahora sabemos cómo crear variables globales en Python, pero ¿qué pasa si queremos modificar el valor de una variable global en Python?

Modificando una Variable Global en Python

a = 15
print("value before modification",a)
#modify a global value
def modify():
    #let's change the global variable a
    a = a*2
    print("after modification, value in function",a)
 
modify()
print("after modification, value outside the function",a)

Salida para la variable Modificar:

value before modification 15

Traceback (most recent call last):

  File "main.py", line 9, in <module>

    modify()

  File "main.py", line 6, in modify

    a = a*2

UnboundLocalError: local variable 'a' referenced before assignment

Aquí, el valor antes de la modificación se imprimirá como 15, pero dado que intentamos modificar el valor de una variable global dentro de la función, dará un error porque la misma variable ‘a’ actúa como un variable local con esa función por lo que no podemos hacer la modificación de esta manera.

Entonces, ahora para la modificación, usaremos aquí el palabra clave global en python off-.

a = 15
print("value of 'a' before modifying=",a)
#modify a global value
def modify():
    #make the use of a global keyword to change the value actually
    global a
    a=5
    print("after modification,value of'a'in function=",a)
 
modify()
print("after modification,value of 'a'outside the function=",a)

Salida para palabra clave global:

value of 'a' before modifying= 15
after modification,value of'a'in function= 5
after modification,value of 'a'outside the function= 5

De la salida, está claro que el valor ahora se ha modificado, por lo que, para modificar el valor de una variable global fuera del contexto de una función particular, usamos el palabra clave global en python.

Variables locales

Arriba, al modificar la variable global sin usar la palabra clave global, debe haber encontrado la palabra «variable local«. ¿Qué significa local?

Un objeto cuyo alcance está limitado a un alcance particular es local y, por lo tanto, es una variable local.

  • Las variables locales tienen un alcance local que se limita a un bloque particular en el que se declaran.
  • Se declaran esencialmente dentro la definición de una función particular.
  • No se puede acceder a ellos fuera del bloque en el que están declarados.

Crear y acceder a una variable local

Las variables que usamos en una función son locales para esa función. Por lo tanto, declaramos la variable local en el bloque donde queremos usarla, es decir, dentro del límite de esa función, y por lo tanto, su alcance se completa solo dentro de ese bloque.

def fun1():
    x=18
    print("Value of 'x' is local to fun1() and x=",x)
def fun2():
    y=20
    print("Value of 'y' is local to fun2() and y=",y)
fun1()
fun2()

Salida para la variable local:

Value of 'x' is local to fun1() and x=18
Value of 'y' is local to fun2() and y=20

Intente acceder a ‘X en play1() e ‘y’ en play2()-

def fun1():
    x=18;
    print("Value of 'y' is",y)
def fun2():
    y=20;
    print("Value of 'x' is",x)
fun1()
fun2()

Entonces, ¿qué crees que pasará?

Aquí obtendrá un error como-.

Resultado:

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    fun1()
  File "main.py", line 3, in fun1
    print("Value of 'y' is",y)
NameError: name 'y' is not defined

Nota: Del error anterior, está claro que solo se puede acceder a una variable local dentro de su alcance.

Modificando variables locales en Python

La modificación de variables locales en Python es una tarea sencilla, como se muestra a continuación:

def fun1():
    #scope of x is local to fun1
    x=18
    print("Value of 'x' before modification is=",x)
    #try to modify x
    x=x+20
    print("Value of 'x' after modification is=",x)
fun1()

Salida para modificar variables locales:

Value of 'x' before modification is= 18
Value of 'x' after modification is= 38

El concepto de variables globales y locales debería ser claro para usted ahora.

Entonces, ¿qué sucede si hay una variable local y una variable global con el mismo nombre en el mismo programa?

#declaring a global variable
p =8;
def fun():
    #local variable with the same name as global variable
    p=18;
    print("value of p=",p)
fun()

Resultado:

value of p= 18

Entonces, cuando una variable local y una variable global tienen el mismo nombre, la se da prioridad a una variable local de esa función, que solo recibe impresión.

Una variable no local

  • El concepto de variables no locales se utiliza sólo con python.
  • Se usa donde hay funciones anidadas y si queremos que la variable dentro de la función no sea local.

¿Qué significa exactamente cuando digo «funciones anidadas»?

Una función anidada, en general, es una colección de funciones declaradas dentro de otra función.

# Python program to illustrate
# nested functions
def outerFunction(num):
number=num

def innerFunction():
    print(number)

innerFunction()

outerFunction(10)

Salida para modificar variables locales:

10
  • innerFunction() en el ejemplo anterior es una función interna porque se declara dentro de la función externa().
  • innerFunction() solo se puede llamar después de que se haya llamado a OuterFunction(). Después de eso, la función externa () llamará a la función interna (), que se define dentro de ella.
  • Es importante llamar a la función externa para ejecutar la función interna.

Ahora intentemos cambiar la variable numérica a número=número+10

El motivo del cambio, en el momento en que escribes número=número+10

y ejecute el código, obtendrá el Error local desconectado Como se muestra abajo.

# Python program to illustrate
#scope of local variables
def outerFunction(num):
number=num

def innerFunction():
    #update number inside innerFunction
    number=number+10
   
    print(number)

innerFunction()

outerFunction(10)

Resultado:

Traceback (most recent call last):
  File "main.py", line 14, in <module>
    outerFunction(10)
  File "main.py", line 12, in outerFunction
    innerFunction()
  File "main.py", line 8, in innerFunction
    number=number+10
UnboundLocalError: local variable 'number' referenced before assignment

Intencionalmente, si lo cambia a una variable global diciendo el número global, obtiene un nuevo problema llamado Error de nombre.

# Python program to illustrate
#scope of local variables
def outerFunction(num):
number=num

def innerFunction():
    #trying to make it global
    global number
   
    #update number inside innerFunction
    number=number+10
   
    print(number)

innerFunction()

outerFunction(10)

Resultado:

Traceback (most recent call last):
  File "main.py", line 17, in <module>
    outerFunction(10)
  File "main.py", line 15, in outerFunction
    innerFunction()
  File "main.py", line 11, in innerFunction
    number=number+10
NameError: name 'number' is not defined

Seguro que estará confundido y no estará seguro de qué hacer a continuación.

Las variables no locales ahora entran en escena.

Releyendo la definición, podemos concluir que si una función anidada está presente, se debe usar una variable no local.

Ahora veamos cómo crear y acceder a una variable no local.

Crear y acceder a variables no locales

La palabra clave no local se utiliza para declarar una variable no local.

def outerFunction():
  #x is a local variable to outerFunction()   
  x =5
  print("value of 'x' in outerFunction=",x)
  def innerFunction():
    #x is nonlocal to innerFunction()
    nonlocal x
    x=6
    print("value of 'x' in innerFunction=",x)
  innerFunction() 

outerFunction()

Resultado:

value of 'x' in outerFunction= 5
value of 'x' in innerFunction= 6

Veamos si podemos modificar la variable no local o no. Lo comprobaremos haciendo algunas modificaciones al código anterior.

Modificando una variable no local en Python

def outerFunction():
  #x is a local variable to outerFunction()   
  x =5
  print("value of 'x' in outerFunction=",x)
  def innerFunction():
    #x is nonlocal to innerFunction()
    nonlocal x
    x=6
    print("value of 'x' in innerFunction=",x)
    #let's modify x
    x=x+10
  innerFunction()
  return x

print("x changed to",outerFunction())

Resultado:

value of 'x' in outerFunction= 5
value of 'x' in innerFunction= 6
x changed to 16

¿Qué pasó aquí? Solo piensa en ello.

Realizamos cambios en la variable no local que estaba dentro de la función interna, pero el resultado que obtenemos básicamente de la función externa y el valor de ‘x’ se cambia aquí incluso cuando x = 5 debería ser a través de la función externa, pero desde entonces. la variable no era local, también está cambiando para la ‘x’ de la función externa.

Ahora que hemos cubierto «Variables globales, locales y no locales en Python», pasemos a algunas preguntas comunes sobre ellas.

Si tiene otras preguntas, déjelas en los comentarios a continuación; estaremos encantados de responderles.

Preguntas frecuentes

¿Qué son las variables locales y globales en Python?

Las variables locales son aquellas variables que se declaran y usan dentro de un bloque o función en particular, mientras que las variables globales son las variables que tienen un alcance global y se pueden usar dentro o fuera de una función en be.

¿Qué es una variable no local en Python?

Una variable no local es una variable que se usa cuando hay funciones anidadas y no queremos que la variable de la función sea local dentro de esa función.

¿Podemos modificar una variable global en python?

Sí, podemos modificar una variable global en python usando la palabra clave ‘global’ en el contexto de la función donde queremos hacer la modificación.

¿Cómo declaro una variable no local?

Una variable no local se puede declarar usando la palabra clave ‘no local’ en python.

¿Está bien usar variables globales en Python?

No solo eso, porque python considera una variable local si no está declarada como una variable global, y esto crea problemas específicamente cuando desea modificar una variable global en python.

Aprende más de programación: