Solución:
Esto se debe a que, aunque Var1
existe, también está utilizando una declaración de asignación en el nombre Var1
dentro de la función (Var1 -= 1
en la línea inferior). Naturalmente, esto crea una variable dentro del alcance de la función llamada Var1
(sinceramente, un -=
o +=
solo actualizará (reasignará) una variable existente, pero por razones desconocidas (probablemente coherencia en este contexto), Python la trata como una asignación). El intérprete de Python ve esto en el momento de la carga del módulo y decide (correctamente) que el alcance global Var1
no debe usarse dentro del ámbito local, lo que genera un problema cuando intenta hacer referencia a la variable antes de que se asigne localmente.
El uso de variables globales, fuera de la necesidad, generalmente es mal visto por los desarrolladores de Python, porque conduce a un código confuso y problemático. Sin embargo, si desea utilizarlos para lograr lo que implica su código, simplemente puede agregar:
global Var1, Var2
dentro de la parte superior de su función. Esto le dirá a Python que no tiene la intención de definir un Var1
o Var2
variable dentro del ámbito local de la función. El intérprete de Python ve esto en el momento de la carga del módulo y decide (correctamente) buscar cualquier referencia a las variables mencionadas anteriormente en el alcance global.
Algunos recursos
- el sitio web de Python tiene una gran explicación para este problema común.
- Python 3 ofrece un
nonlocal
declaración – compruébalo también.
Si establece el valor de una variable dentro de la función, python lo entiende como la creación de una variable local con ese nombre. Esta variable local enmascara la variable global.
En tu caso, Var1
se considera una variable local y se usa antes de establecerse, de ahí el error.
Para resolver este problema, puede decir explícitamente que es global poniendo global Var1
en tu función.
Var1 = 1
Var2 = 0
def function():
global Var1
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
Var1 =- 1
function()
Puede solucionar este problema pasando parámetros en lugar de confiar en Globals
def function(Var1, Var2):
if Var2 == 0 and Var1 > 0:
print("Result One")
elif Var2 == 1 and Var1 > 0:
print("Result Two")
elif Var1 < 1:
print("Result Three")
return Var1 - 1
function(1, 1)