Saltar al contenido

Cómo hacer que una variable local (dentro de una función) sea global

Nuestros investigadores estrellas han agotado sus reservas de café, por su búsqueda todo el tiempo por la respuesta, hasta que Estrella encontró la respuesta en Bitbucket por lo tanto ahora la comparte contigo.

Solución:

Aquí hay dos métodos para lograr lo mismo:

Uso de parámetros y retorno (recomendado)

def other_function(parameter):
    return parameter + 5

def main_function():
    x = 10
    print(x)    
    x = other_function(x)
    print(x)

cuando corres main_functionobtendrás el siguiente resultado

>>> 10
>>> 15

Usando globales (nunca hagas esto)

x = 0   # The initial value of x, with global scope

def other_function():
    global x
    x = x + 5

def main_function():
    print(x)    # Just printing - no need to declare global yet
    global x   # So we can change the global x
    x = 10
    print(x)
    other_function()
    print(x)

Ahora obtendrás:

>>> 0    # Initial global value
>>> 10   # Now we've set it to 10 in `main_function()`
>>> 15   # Now we've added 5 in `other_function()`

Simplemente declare su variable fuera de cualquier función:

globalValue = 1

def f(x):
    print(globalValue + x)

Si lo necesitas asignar al global desde dentro de la función, use el global declaración:

def f(x):
    global globalValue
    print(globalValue + x)
    globalValue += 1

Si necesita acceder a los estados internos de una función, posiblemente sea mejor que use una clase. Puede hacer que una instancia de clase se comporte como una función haciéndola invocable, lo que se hace definiendo __call__:

class StatefulFunction( object ):
    def __init__( self ):
        self.public_value = 'foo'

    def __call__( self ):
        return self.public_value


>> f = StatefulFunction()
>> f()
`foo`
>> f.public_value = 'bar'
>> f()
`bar`

Más adelante puedes encontrar las aclaraciones de otros gestores de proyectos, tú incluso tienes la libertad de insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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