Las variables globales pueden ser útiles en algunas situaciones, pero un excesivo o inadecuado de estas generan problemas. Desde un código difícil de mantener, pasado por efectos secundarios inesperados o errores de los programas en tiempo de ejecución. En esta entrada veremos qué son las variables globales en Python, los principales problemas de sus uso excesivo y cómo evitarlos con buenas prácticas.
Tabla de contenidos
Una variable global es aquella definida fuera de cualquier función o clase y que, por lo tanto, es accesible desde cualquier parte del código. Un ejemplo de una variable global es la variable contador en el siguiente código:
contador = 0 # Variable global
def incrementar():
global contador # Modificamos la variable global
contador += 1
incrementar()
print(contador) # 1 Aunque esto puede parecer una práctica válida para esta tarea, cuando el código aumenta en complejidad pueden aparecer varios problemas.
Entre los principales problemas que puede traer el uso de variables globales en Python se pueden enumerar los siguientes.
El uso de variables globales hace que el código sea menos predecible. Si varias funciones modifican la misma variable global, puede ser difícil rastrear dónde y por qué ha cambiado.
estado = "inicial"
def cambiar_estado():
global estado
estado = "modificado"
cambiar_estado()
print(estado) # "modificado" Este tipo de código es difícil de depurar cuando el programa aumenta de tamaño.
Una solución a este problema es pasar la variable que se desea modificar como un parámetro y recuperar esta, de este modo los cambios siempre estarán acotados. Evitando que se produzcan cambios accidentales.
def cambiar_estado(estado):
return "modificado"
estado = "inicial"
estado = cambiar_estado(estado)
print(estado) # "modificado" Si una función usa una variable global, su comportamiento puede cambiar de forma impredecible según el estado global.
descuento = 0.1 # Variable global
def calcular_precio(precio):
return precio * (1 - descuento) # Depende de la variable global
print(calcular_precio(100)) # 90.0
descuento = 0.2
print(calcular_precio(100)) # 80.0 (Resultado inesperado) En este caso el descuento puede ser modificado con un valor que no es el esperado o no recuperar el valor original
Para este caso, la solución es pasar el descuento como un parámetro de modos que se pueda modificar en cualquier momento. Un valor que se puede dejar como opcional con un descuento por defecto
def calcular_precio(precio, descuento=0.2):
return precio * (1 - descuento)
print(calcular_precio(100)) # 80.0
print(calcular_precio(100, 0.1)) # 90.0
print(calcular_precio(100, 0.2)) # 80.0 En algunos casos, las variables globales pueden ser útiles.
Se pueden usar para definir valores que no mutan a lo largo del programa.
PI = 3.1416 # Se usa mayúsculas para indicar que es constante
Los parámetros de configuración, que tampoco suelen mutar durante la ejecución del programa también se pueden guardar en una variable global
config = {
"modo_debug": True,
"version": "1.0.0"
} En script pequeños, tampoco suele ser un problema recurrir a variables globales.
contador = 0
def incrementar():
global contador
contador += 1 Si necesitas compartir datos entre funciones, considera las siguientes opciones antes de recurrir a una variable global.
La primera opción debería ser usar parámetros y valores de retorno para gestionar mejor los cambios en los valores de las variables.
def actualizar_dato(valor):
return valor + 1
dato = 0
dato = actualizar_dato(dato) En lugar de variables globales, se pueden crear clases para compartir valores en cada una de las instancias de la clase.
class Contador:
def __init__(self):
self.valor = 0
def incrementar(self):
self.valor += 1
c = Contador()
c.incrementar()
print(c.valor) # 1 En lugar de usar una variable global en el mismo archivo, defínela en un módulo separado.
Archivo config.py:
config = {
"modo_debug": True,
"version": "1.0.0"
} Uso en otro archivo:
import config print(config.config["modo_debug"]) # True
Las variables globales en Python pueden parecer una solución rápida para compartir datos entre funciones, pero su uso excesivo puede causar problemas de mantenimiento, depuración y concurrencia.
Para evitar estos problemas:
Adoptar buenas prácticas hará que tu código sea más seguro, claro y mantenible.
Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.
En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…
En la serie Creación de una API REST con Express y TypeScript construimos una API…
Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…
En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…
Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…
En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…
This website uses cookies.