Python: Funciones para ricos y funciones para pobres

Objetivo: mostrar que las funciones son objetos e ilustrar su uso como argumentos de otras funciones.

Lo hemos dicho ya en alguna que otra ocasión: en Python todo son objetos. Incluso una función es un objeto.

Obsérvalo:

>>> def saluda(nombre):
  print('Hola', nombre)

>>> saluda('Javier')
Hola Javier

>>> type(saluda)
<class 'function'>
>>> print(saluda)
<function saluda at 0x02500078>

Esta circunstancia nos permite ciertos usos que pueden parecer estrambóticos a simple vista. Si una función es un objeto, tiene derecho a que se le trate como tal, bajo riesgo de protestar por agravio comparativo.

Entre otras cosas, tiene derecho a que se use su nombre en asignaciones:

>>> bienvenida = saluda

De modo que ya podemos realizar invocaciones como:

>>> bienvenida('Pedro')
Hola Pedro

Ambos nombres, saluda y bienvenida, referencian al mismo objeto función:

>>> id(bienvenida)
38797432
>>> id(saluda)
38797432

El nombre de una función también puede ser pasado como argumento de otra función.

Vamos a ilustrarlo con un ejemplo muy sencillo. Imagínate que tenemos dos funciones de tarificación diferentes por un mismo servicio. A los clientes normales les aplicaremos un rasero, pero a los más pudientes les daremos una pequeña clavada y su factura será mayor.

def tarifar(horas):
    importe = horas * 20 # Cobramos 20 euros la hora
    return importe

def tarifarplus(horas):
    importe = horas * 60 # Cobramos 60 euros la hora
    return importe

La función tarifar() toma como argumento el número de horas trabajadas y devuelve el importe correspondiente a una tasa de 20 euros la hora. La función tarifarplus() tiene como diferencia el pequeño detalle de que el precio por hora es mayor.

Observa ahora la definición de esta otra función:

def facturar(funcion_tarificacion, horas):
    return funcion_tarificacion(horas)

Como argumentos le pasaremos, además de las horas empleadas, el nombre de la función con la que realizaremos la facturación, función que será empleada para devolver el importe final.

Veamos un ejemplo de invocación de la función facturar() en un intérprete interactivo:

Si tienes poco dinero:

>>> facturar(tarifar, 5)
100

Pero, si te sobra la pasta, te mereces pagar más:

>>> facturar(tarifarplus, 5)
300

Justicia social.

Javier Montero Gabarró


Python: Funciones para ricos y funciones para pobres


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

2 opiniones en “Python: Funciones para ricos y funciones para pobres”

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies