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_function
obtendrá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.