[MÚSICA] Hola. Bienvenidos. En esta clase hablaremos sobre dos conceptos que son muy importantes en el mundo de las funciones, el concepto de la invocación y el concepto de scope. Vamos a partir primero hablando de la invocación. La invocación es simplemente el llamado de una función. Y se realiza cada vez que queremos ejecutar la función que estamos definiendo. Si una función no se invoca y solo la definimos, el código que está dentro de la función nunca se va a ejecutar y se va a quedar sin realizar ninguna acción. Es necesario invocar una función después de definirla pero nunca antes. De lo contrario, el intérprete de Python no la conocerá. Al invocar una función, es muy fácil caer en un error común del orden. Es decir, llamar a la función antes que esta esté definida. En el ejemplo que hay a continuación se muestra una función que imprime una función una cuenta hasta justo antes de llegar al tope, tomando el cuenta el lugar donde se realiza la invocación. ¿Cuál cree usted entonces que será la salida de esta función en consola? Si lo miramos nos da un error. Como la función fue definida justo antes del llamado, Python nos va a decir que dicho nombre no está definido y arroja un error. Por lo que el programa termina y no ejecuta ninguna instrucción más. Ahora si miramos el mismo ejemplo pero en orden invertido donde el llamado a la función cuenta está posterior a su definición, entonces ahora podemos ejecutarlo y vemos que el error no ocurre y todo se comporta como esperábamos. [RUIDO] Como you vimos, al hablar del retorno es posible igualar el llamado o la invocación de la función a una variable para poder utilizar el valor que la función nos retorna. En la función que vemos a continuación el cálculo que se realiza es un cálculo sumamente simple que responde a la variable resultado. Al realizar el llamado se iguala el resultado del cálculo de 5 a la variable salida. De modo que en la variable salida se obtiene el valor que había en la variable resultado dentro de nuestra función. Pasemos ahora al concepto de scope. El scope, también llamado alcance de una función, corresponde al manejo de las variables dentro de esta función. Es muy importante diferencias los scopes dentro de una función los cuales son distintos de otras fuera de la misma o dentro de otra función. Hablaremos de un scope externo o superior cuando hablemos de todo aquello que esté en el programa pero fuera de la función. Uno de los usos de la palabra scope es el de la mirilla de los rifles, así se puede entender como aquello que es capaz de ver la función y trabajar con ella dentro de su alcance. Las variables que están definidas dentro de una función no existen fuera de ella. Pero para entender mejor scope lo mejor es ver un ejemplo. La función que estamos viendo ahora determina si un número es divisible por 2, o sea, si es par. Y tiene una variable creada dentro de ella que se llama divisor. Como visto, esa variable fue definida dentro de la función es par. Por lo tanto, no existe fuera de ella así al tratar de utilizarla Python nos entregará un error porque dirá que la variable de nombre divisor no está definida en el scope superior. Sin embargo, se puede utilizar sin problemas siempre que estemos dentro de la función de nombre es par. El hecho de que las variables desaparezcan al terminar una función evitan que provoquemos errores y permite que usemos los mismos nombres de variables dentro de las funciones, tal como solemos hacerlo con variables iteradoras como i o como j, de modo que no hay que preocuparse al usarlas fuera de las funciones porque para el programa esas variables no existen fuera de las funciones donde las estamos llamando. A las variables que se usan solamente dentro de las funciones y no existen fuera de ellas se les llama variables locales. Existen solamente dentro de ese scope. Es decir, solo existen dentro de la función que las define. [RUIDO] Muchas veces podemos querer utilizar dentro de una función variables definidas afuera anteriormente. Es decir, fuera del scope de la función. Esto es posible pero únicamente se pueden leer, pero nunca modificar. Como dijimos, fuera del scope se entiende como cualquier variable que no fue definida en la función. Si no que en un scope externo o un scope superior. A continuación vamos a ilustra diversos casos con sus respectivas salidas para que vayamos entendiendo mejor el concepto. En primer lugar, tenemos la función de nombre fx, la cual utiliza el parámetro de nombre número y una variable de nombre factor perteneciente a un scope superior. Esto es posible y funciona sin problemas. El llamado a print imprime el producto entre ambos y muestra el valor del factor utilizado. En el siguiente ejemplo se intenta modificar una variable externa del scope superior añadiéndole 0.1. Entonces, tratamos de modificar la variable de nombre factor que está definida afuera y en este caso tendrá falla porque no es posible modificar variables que están en un scope superior dentro de la función. Por último, en los siguientes ejemplos se muestra cómo las variables locales son variables distintas a las variables de scope superior. En la función de nombre fx3 se define un nuevo factor y el producto se realiza con ese factor que está definido dentro. Sin embargo, si se imprime el factor definido fuera de la función, este sigue siendo el mismo 0.5 porque nunca ha sido modificado. [RUIDO] En el siguiente ejemplo en el caso de la función fx4, la función es llamada posteriormente a fx3. De modo que se podría pensar que el factor que se consideraba fx4 es el que definimos en fx3. Pero por lo que vemos esto no es así. Finalmente, las variables definidas en una función son variables locales y no existen una vez fuera de la función. Por otro lado, dentro de una función es posible leer y usar variables de un alcance a un scope externo, pero no es posible modificarlas en ningún momento. Muchas gracias por su atención y esperemos que nos sigan acompañando en las siguientes clases. Nos vemos. [MÚSICA]