sábado, 27 de marzo de 2021

Ejercicio 9_Funciones con parámetro opcional, argumentos arbitrarios *arg, parámetros nombrados (no posicional) y parámetros nombrados recibiendo un diccionario.

""" 

    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 (*)?

  1. 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 llamada nenos".

  2. Flexibilidad: Gracias a esto, tu función lista_nenos es dinámica. Puedes pasarle 3 nombres, 10 o ninguno, y no dará error.

  3. Es un iterable: Como bien notaste en tu comentario, al ser una tupla, puedes recorrerla con un bucle for o 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:

  • dict es el nombre del tipo

Python convierte automáticamente esto en:

neno = { "fname": "Xan", "lname": "Carballo" }

Por eso puedes acceder así:

print("His last name is " + neno["lname"])

Salida:

His last name is Carballo

"""









Microbit

  Proyecto Sensores utilizados Funcionamiento Alarma de Caja Fuerte Acelerómetro Si alguien mueve la caja, la Micro:bit detecta la inclinaci...