Variables locales y globales en Python

    Uno de los elementos b谩sicos de los lenguajes de programaci贸n son las variables. Hablando simplemente, una variable es una capa de abstracci贸n para las celdas de memoria que contienen el valor real. Para nosotros, como desarrolladores, es m谩s f谩cil recordar el nombre de la celda de memoria que recordar su direcci贸n de memoria f铆sica. Un nombre v谩lido puede constar de caracteres de la ‘a’ a la ‘z’ (en may煤sculas y min煤sculas), as铆 como de d铆gitos. No se permiten espacios ni caracteres especiales, como di茅resis y guiones, en el nombre.

    Adem谩s, las variables tienen un tipo de datos espec铆fico como cadenas (caracteres), d铆gitos, listas o referencias a otras variables. En Python, podemos reutilizar la misma variable para almacenar valores de cualquier tipo. El tipo se determina autom谩ticamente por el valor que se asigna al nombre. Para definir una variable con un valor espec铆fico, simplemente asigne este valor a un nombre de la siguiente manera:

    age = 42
    name = "Dominic"
    places = ["Berlin", "Cape Town", "New York"]
    

    El int茅rprete de Python crea las tres variables age, namey places, y asigna el valor 42 a la primera y “Dominic” a la segunda variable, y places se convierte en una lista de tres elementos que contiene las cadenas “Berl铆n”, “Ciudad del Cabo” y “Nueva York”.

    Espacios de nombres

    Todas las variables de arriba son parte del mismo espacio de nombres y por lo tanto tienen el mismo alcance. A menos que se redefina como variable local m谩s adelante, una variable definida en el programa principal pertenece al espacio de nombres global, al que se puede acceder mediante cualquier funci贸n en su programa Python. El siguiente c贸digo de ejemplo demuestra eso y usa las dos variables name y age en la funci贸n info().

    age = 42
    name = "Dominic"
    places = ["Berlin", "Cape Town", "New York"]
    
    def info():
        print("%s is %i years old." % (name, age))
        return
    
    info()
    

    La salida consta de una sola l铆nea que proviene del print declaraci贸n en funci贸n info():

    $ python3 global.py
    Dominic is 42 years old.
    

    Para ser m谩s precisos, cada m贸dulo, clase y funci贸n tiene su propio espacio de nombres y las variables est谩n vinculadas localmente a eso. En el siguiente ejemplo, usamos dos espacios de nombres: el externo, global del programa principal y el interno, local de la funci贸n simplemente nombrada output(). La variable place existe en el programa principal (l铆nea 6) y se redefine como una variable local con un nuevo valor en la l铆nea 2 de la funci贸n output().

    def output():
       place = "Cape Town"
       print("%s lives in %s." % (name, place))
       return
    
    place = "Berlin"
    name = "Dominic"
    print("%s lives in %s." % (name, place))
    output()
    

    La salida consta de estas dos l铆neas, mientras que la primera l铆nea se origina en el programa principal (l铆nea 8) y la segunda l铆nea en el print declaraci贸n en la l铆nea 3 en la funci贸n output(). Al principio las dos variables name y place se definen en el programa principal (l铆neas 6 y 7) y se imprimen en stdout. Llamando al output() funci贸n, la variable place se redefine localmente en la l铆nea 2 y name proviene del espacio de nombres global. Esto conduce a la salida como se muestra a continuaci贸n.

    $ python3 localscope.py
    Dominic lives in Berlin.
    Dominic lives in Cape Town.
    

    Modificar variables globales en un espacio de nombres diferente

    Se puede acceder al valor de una variable global a lo largo de todo el programa. Para lograr eso desde dentro de las funciones, Python ofrece el uso de la palabra clave global. La funci贸n a continuaci贸n demuestra c贸mo usarla e importa la variable name en el espacio de nombres de la funci贸n:

    def location():
        global place
        place = "Cape Town"
        return
    
    place = "Berlin"
    print(place)
    location()
    print(place)
    

    La variable place ya est谩 definido en el programa principal (l铆nea 6). Usando la palabra clave global en la l铆nea 2, la variable pasa a estar disponible en la funci贸n location() y se puede establecer en un valor diferente, inmediatamente (l铆nea 3). La salida del c贸digo se muestra aqu铆:

    $ python3 globalscope.py
    Berlin
    Cape Town
    

    Sin usar la palabra clave global como se ve en la l铆nea 2, la variable place se tratar铆a como una variable local en la funci贸n location() en su lugar y la variable place del programa principal no se modifica.

    Detectar el alcance de una variable

    Python tiene dos m茅todos incorporados llamados globals() y locals(). Le permiten determinar si una variable es parte del espacio de nombres global o del espacio de nombres local. El siguiente ejemplo muestra c贸mo utilizar estos m茅todos:

    def calculation():
        "do a complex calculation"
        
        global place
        place = "Cape Town"
        name = "John"
        
        print("place in global:", 'place' in globals())
        print("place in local :", 'place' in locals())
        print("name in global :", 'name' in globals())
        print("name in local  :", 'name' in locals())
        return
    
    place = "Berlin"
    print(place)
    calculation()
    

    El resultado es el siguiente y muestra el alcance de las dos variables place y name dentro de la funci贸n calculation():

    $ python3 variablelist.py
    Berlin
    place in global: True
    place in local : False
    name in global : False
    name in local  : True
    

    Usar variables globales en la pr谩ctica

    Usar y modificar variables globales desde funciones internas se considera un estilo de programaci贸n muy malo, ya que provoca efectos secundarios, que son bastante dif铆ciles de detectar. En su lugar, se recomienda encarecidamente utilizar los par谩metros de funci贸n adecuados.

    Enlaces y referencias

     

    Etiquetas:

    Deja una respuesta

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