def fun(a,b):
    x = a + b

print(fun(1,2))

"""
Explanation: Scope
El scope o alcance de una función hace referencia al manejo de las variables de una función, es decir como se comportan las variables dentro y fuera de una función.
Las variables definidas dentro de una función tienen un scope local, es decir son variables locales que solo existen dentro de la función, esto nos permite utilizar las mismas variables para la definicion de diferentes funciónes.
End of explanation
"""


def fun(a,b):
    x = a+b
    return(x)

print(fun(1,2))

"""
Explanation: No es posible imprimir por pantalla el valor de "x" ya que solo existe dentro de la función. Para llevar a "x" a un scope superior, es decir que exista fuera de la función hay que regresar su valor utilizando la función return(), dentro de la definición de la función.
End of explanation
"""


def fun2():
    print(a)
    
a=2

fun2()

def fun3():
    x = a+2
    return(x)
    
fun3()

"""
Explanation: Cuando se ejecuta una funcion es posible acceder a una variable de scope superior, pero no se puede modificar o utilizar, es decir solo se accede a modo de lectura.
End of explanation
"""


def fun4():
    a = a+2
    return(a)
    
fun4()

"""
Explanation: Como se observa es posible hacer lectura y usar la variable, pero no es posible reescribirla.
End of explanation
"""


