DMarlon Studio

Lección 16 · 16 de 20

Parámetros, valores por defecto y return · Python

Dé valores por defecto a los parámetros de sus funciones en Python, llámelas por nombre y devuelva varios resultados con return.

Python · Parámetros, valores por defecto y return en DMarlon Studio: el código del ejemplo y su salida en la terminal

Una función puede tener varios parámetros. En order_total(price, quantity, discount=0) el último tiene un valor por defecto: si no se pasa, vale 0. Por eso order_total(4.0, 3) da 12.0 y order_total(4.0, 3, 25) aplica un 25 % de descuento y da 9.0.

Los valores también se pueden pasar por nombre (argumentos con nombre): order_total(quantity=2, price=10.0, discount=10). Así el orden da igual y la llamada se entiende mejor.

return puede devolver varios valores separados por comas: en realidad devuelve una tupla. summary() da la nota más baja, la más alta y la media, y la llamada las desempaqueta en low, high, avg, como vio con las tuplas.

return además termina la función en ese momento. En grade(), si la nota es 9 o más, devuelve «Outstanding» y ya no mira el resto; por eso no hace falta elif ni else.

Una función sin return devuelve None («nada»). cheer() escribe su frase, pero lo que devuelve es None, y eso es lo que escribe el último print().

Código · main.py

# Several parameters; the last one has a default value.def order_total(price, quantity, discount=0):    total = price * quantity    return total - total * discount / 100print(order_total(4.0, 3))                     # no discountprint(order_total(4.0, 3, 25))                 # 25 % offprint(order_total(quantity=2, price=10.0, discount=10))  # by name# return can give back several values at once (a tuple).def summary(marks):    average = sum(marks) / len(marks)    return min(marks), max(marks), round(average, 1)low, high, avg = summary([6, 9, 7, 10, 8])print(f"Lowest {low}, highest {high}, average {avg}")# return also ends the function straight away.def grade(mark):    if mark >= 9:        return "Outstanding"    if mark >= 5:        return "Pass"    return "Keep trying"for mark in [9.5, 7.2, 5.0, 3.8]:    print(mark, "->", grade(mark))# A function without return gives back None.def cheer(name):    print("Well done,", name)print(cheer("Lola"))

Salida · python3 main.py

12.0
9.0
18.0
Lowest 6, highest 10, average 8.0
9.5 -> Outstanding
7.2 -> Pass
5.0 -> Pass
3.8 -> Keep trying
Well done, Lola
None

Para recordar

  • param=valor da un valor por defecto.
  • Los argumentos con nombre se pueden pasar en cualquier orden.
  • return a, b devuelve una tupla que se puede desempaquetar.
  • return sale de la función al instante.
  • Sin return, la función devuelve None.

Ejercicio

Añada a order_total() un parámetro shipping=3.5 que se sume al final, salvo cuando el total supere los 30 euros (entonces, envío gratis).