***args** y ****kwargs**
Partimos de una función que suma dos argumentos ... aunque lo deseable sería poder sumar no solo dos sino un número indeterminado de argumentos.
def suma(numero1, numero2):
return numero1 + numero2
suma(3,5) # es necesario pasar exactamente dos argumentos a la función
Función que suma un número indeterminado de argumentos.
def sumar(*valores): # es habitual verlo como def sumar(*args):
print('tupla valores:', valores) # valores: (1, 2, 3, 4) devuelve una tupla
total = 0
for valor in valores:
total += valor
return total
print(sumar(1, 2, 3, 4)) # 10
Calcular el menor de una serie de valores.
No sabemos cuántos valores tendremos que analizar.
Con el operador asterisco lo conseguiremos, aunque también podríamos haber pasado una lista y creado una función que calculara el mínimo de esa lista. Pero ya que tenemos el operador asterisco podemos utilizarle sin necesidad de crear listas.
def encontrar_menor(*valores): # es habitual verlo como def encontrar_menor(*args):
menor = valores[0]
for valor in valores:
if valor < menor:
menor = valor
return menor
print(encontrar_menor(6, 9, 3))
Permite trabajar con diccionarios, pares clave:valor, cuando no sabemos cuántos elementos tendrá el diccionario.
Imprimir los pares clave valor de un diccionario.
def imprimir_parametros(**valores): # recoge los argumentos en forma de diccionario, habitualmente **kwargs
for k, v in valores.items(): # k, v son los pares “key:value”
print(f'{k} → {v}')
imprimir_parametros(a=6, b='Python', c=[1,2,3,4])
d = {'x':1, 'y':2, 'z':3} # creamos un diccionario
print(d)
imprimir_parametros(**d)
def reporta_dic(**valores): # es habitual verlo como def reporta_dic(**kwargs):
return valores # retorna un diccionario
reporta_dic(ciudad='Londres', habitantes=13879757, temperaturas=[8,14,24,15])
Podemos recibir un número indeterminado de argumentos más un número indeterminado de argumentos con asignación de variable.
# La función recoge unos cuantos números y unas parejas de variable=dato
def funcion(*valores, **parejas): # es habitual verlo como def funcion(*args,**kwargs):
print(parejas.items())
for i,(k,v) in enumerate(parejas.items()):
print(i,k,v)
total = 0
for valor in valores:
total += valor
print(f"La temperatura media de Roma es {total/4}")
return total
funcion(7, 13, 24, 16, ciudad="Roma", poblacion=12292895, region='Lacio', nick='Ciudad eterna')