Hola a todos. Este es el último tema de este módulo, pero no por eso el menos importante. De hecho, estoy segura de que lo utilizarán bastante, sobre todo en el módulo cuatro, cuando con Mario usen librerías; y es el uso de parámetros con valor por defecto o también llamados parámetros opcionales. Muy bien, Python nos permite declarar funciones con parámetros que tengan un valor por defecto y en el momento de invocar la función podemos omitirlos y tomarán dicho valor. Veamos un ejemplo. Tenemos la función elevar X a la Y. Noten que el segundo parámetro tiene algo diferente en la asignatura de la función, una asignación y el valor cero. Esta es la manera de declarar parámetros con un valor por defecto y esto quiere decir que podemos llamar la función con dos argumentos o solo con uno. En el siguiente programa principal que invoca la función definida, vemos que es válido invocarla con los argumentos base y potencia y se obtendrá el resultado de elevar la base a la potencia. Pero también es válido invocar la función solo con la base y obtendremos como resultado uno, que es base elevado a la cero. También podríamos tener todos los parámetros opcionales. En este caso, los valores por defecto, tanto para X como para Y, son cero y esto nos permitiría invocar la función con dos, uno o cero argumentos. Nuevamente, si invocamos la función con sus dos argumentos, obtendremos como resultado elevar la base a la potencia. Pero cuando hay más de un parámetro por defecto, al hacer el llamado, Python asigna valores por posición. Por eso podemos usar elevar X a la Y con base porque base es el primer argumento. De otra manera debemos especificar a qué parámetro le estamos dando un valor, como es el caso de la línea 16 donde Y, el segundo parámetro, es el que estamos nombrando o asignándole un valor distinto y debemos hacerlo explícito. Y lo anterior está relacionado con otra regla, y es que si nuestra función tiene una mezcla de parámetros obligatorios y opcionales, los opcionales siempre deben declararse después de los obligatorios. Por último, si invocamos la función con cero argumentos, obtendremos como resultado cero. A continuación, vemos el resultado de invocar la función con base igual diez y potencia igual dos, pero con diferente número de argumentos. Hagamos una pausa con una pregunta, pero tal vez la pregunta que tengan todos es que si los parámetros opcionales se pueden hacer de tipo "dict", y la respuesta es por supuesto, podemos usar "None" como valor por defecto. Volvamos a nuestro ejemplo de los diccionarios que representan cuatro estudiantes. En realidad, nada nos garantiza que siempre tengan que ser cuatro. Podrían ser tres, dos o incluso ninguno. Entonces podemos declarar los cuatro parámetros con valor por defecto "None" y permitir que el número de estudiantes sea flexible. La flexibilidad suena muy bien, sin embargo, tendremos que verificar que el valor del parámetro no sea "None" para poder verificar las otras condiciones. Por ejemplo, para avanzar el semestre según créditos, primero debo garantizar que el estudiante exista, es decir, que no sea "None"; si no, se produciría un error. Veamos el llamado a la función con dos argumentos, "est1" y "est4", por lo tanto, sabemos que "est2" y "est3" serán "None". Y no tendría sentido hacer ningún tipo de operación asociada a ellos. Por último, verificamos que la función efectivamente solo modificó los diccionarios "est1" y "est4". Lo interesante de los parámetros opcionales es que muchas de las funciones de Python, aún de las que ya hemos visto, los usa. Por ejemplo, la función "count", que nos permite contar cuántas veces aparece una subcadena en otra, lo hace. Si buscamos su documentación, nos dice que el parámetro "sub" es obligatorio y que puede estar seguido de un segundo parámetro "start" y de un tercer parámetro "end". Los valores por defecto de estos dos parámetros son cero y la longitud de la cadena, respectivamente. Así, si no los usamos, la función busca en toda la cadena. Pero si los usamos, podemos determinar la porción de la cadena que nos interesa. Esto hace que las funciones sean mucho más flexibles.