"""
Nuevos Ejercicios funciones
27 Marzo
Dicta n clas== mar
Ejemplo 1: Funciones con parámetro opcional
"""
def mi_funcion_sin_valores_defecto(nombre, apellido):
print(nombre + " " + apellido)
def mi_funcion_con_valores_defecto(nombre, apellido=""):
print(nombre + " " + apellido)
# mi_funcion_sin_valores_defecto("Toto") # Así , falla, porque estoy pasando solo un argumento a una funcion que requiere dos
mi_funcion_con_valores_defecto("Toto") # Así , no falla ya que el segundo parametro tiene valor por defecto en la función
"""
Ahora un ejemplo perfecto de lo que en Python se conoce como Arbitrary Arguments (argumentos arbitrarios), comúnmente abreviados como *args.
Aquí te explico brevemente qué está pasando "bajo el capó":
¿Cómo funciona el asterisco (*)?
Empaquetamiento: El símbolo
*le dice a Python: "Toma todos los argumentos posicionales que envíe el usuario y mételos dentro de una tupla llamadanenos".Flexibilidad: Gracias a esto, tu función
lista_nenoses dinámica. Puedes pasarle 3 nombres, 10 o ninguno, y no dará error.Es un iterable: Como bien notaste en tu comentario, al ser una tupla, puedes recorrerla con un bucle
foro acceder a elementos específicos por su índice (empezando desde 0).
def lista_nenos(*nenos):
# print(nenos[2])
for n in nenos:
print(n) # muestro que estoy trabajando con un iterable
lista_nenos("Emil", "Tobias", "Linus")
# cualquier iterable(tuple, lista,... )comienza a contar desde 0
"""
Otro ejemplo "parámetros nombrados":
_frase corta para definirlo
Los parámetros nombrados permiten pasar argumentos a una función indicando el nombre del parámetro, de modo que el orden de los argumentos no es relevante.
"""
def funcionCualquiera(apellido, edad, nombre):
print(nombre + " " + apellido + ":" + edad)
# Keyword Arguments - Parámetros nombrados
funcionCualquiera(nombre="Maria", apellido="perez", edad="40")
# DIFÍCIL-->Ver kwargs en mas detalle (parámetros arbitrarios nombrados, entran a función como un diccionario)
def mif_funcion_kwargs(**neno):
print("His last name is " + neno["lname"])
mif_funcion_kwargs(fname = "Xan", lname = "Carballo")
"""
Explicación:
def mif_funcion_kwargs(**neno):
Los dos asteriscos ** indican que la función recibe parámetros arbitrarios nombrados, **kwargs hace que los parámetros arbitrarios nombrados entren en la función en forma de diccionario (dict).
Python agrupa esos parámetros en un diccionario
La variable neno siempre será un dicccionario, (dict).
En Python:
-
dictes el nombre del tipo
Python convierte automáticamente esto en:
"""

