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 *