Variables Estáticas Equivalentes en Python

Algunas veces cuando nos encontramos en el desarrollo de algún proyecto, queremos tener variables dentro de algunos métodos que puedan cambiar su valor y una vez termina su ejecución, dicho valor se siga conservando y pueda ser utilizado en una siguiente llamada, contrario a lo que ocurre con el ámbito de las variables normales, las cuales se crean en memoria cuando ingresamos a ejecutar el método y se destruyen automáticamente una vez salimos de él.

python-static-variables-power

Feel the Power of Python

El titulo de este artículo obedece a que en lenguajes como C/C++, se llaman exactamente variables estáticas y se pueden declarar de la siguiente forma dentro de una función.


    //Declaración de una variable estática de tipo entero

    static int var = 0;

Ahora, en Python no tenemos una palabra clave para utilizar variables estáticas como la anterior, sin embargo, podemos hacer uso de una propiedad de los métodos en en este lenguaje para tener variables con exactamente el mismo comportamiento, lo cual es muy útil.

Primera Forma.

Podemos definir un método, y utilizando como prefijo el nombre de la función seguido de un punto, podemos tener acceso a la variable como un atributo de dicha función a través del operador punto, mejor un ejemplo:


def func():
    func.var += 1 #Modificación de la variable "estática"
    print func.var

func.var = 0 #inicialización de la variable fuera de la función

#Se llama 10 veces al método
for i in range(10):
    func()

Con el código anterior, existe la “desventaja”  de tener que definir e inicializar el atributo de la función, en este caso una variable numérica, fuera de la función en sí, ya que si entramos por primera vez a ejecutar el método y no hemos declarado e inicializado dicho atributo tendremos una excepción de tipo NameError.

Segunda Forma.

Esta segunda forma, es la que utilizo con frecuencia cuando hago uso de este tipo de variables, se trata de colocar un fragmento de inicilización, es decir, cuando entramos a la función ‘preguntamos’ si ya está declarada la variable que necesitamos, si está declara el código continua de forma normal, por el contrario sino se encuentra declarada (ocurre solo cuando realizamos la primera ejecución) entonces la declaramos y la inicializamos.

Ejemplo:

def func():

    #Declaración e inicilizacion de la variable "estática"
    if not hasattr(func,"val"):
        func.val = 0

    print func.val
    func.val += 1

#Se llama 10 veces al método
for i in range(10):
    func()

Como se puede ver con esta segunda forma, tenemos un código mucho más compacto ya que evitamos tener que realizar declaraciones externas a la función.

Espero que haya resultado útil esta información que personalmente me parece una característica muy interesante de Python, si crees que está información puede resultarle útil a alguien más, ayúdanos a compartirla.


 

Autor: Julio César Echeverri M.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s