Introducción a Python para principiantes

Funciones

Lo último que vamos a ver son las funciones, bloques de código reutilizable que forman parte de casi todos los lenguajes de programación actuales.

Son esencialmente una serie de instrucciones identificadas con un nombre que sirven para realizar una determinada tarea o cálculo sobre unos valores.

Vamos a crear una para estudiar su funcionamiento:

funciones.py

def saludar():
  print('Hola mundo')

Todo el contenido del bloque a partir del punto y con un nivel de tabulación formará parte de la función.

Una vez la tenemos definida podemos ejecutarla haciendo referencia a su nombre:

saludar()

Los paréntesis es lo que indica que queremos ejecutar la función, sino los ponemos simplemente haríamos referencia a ella.

Podemos ejecutarla tantas veces como queramos:

saludar()
saludar()
saludar()

Por ahora nuestra función no es muy útil, sólo imprime un mensaje, vamos a transformarla en algo más interesante.

Las funciones pueden recibir datos que pueden manipularse dentro para realizar diferentes tareas. Es precisamente el hecho de que una función puede recibir datos lo que las hace tan versátiles y uno de los conceptos claves de la programación.

Por ejemplo podríamos recibir un nombre y saludarlo. Para hacerlo es muy sencillo, sólo tenemos que definir un parámetro de la siguiente forma:

def saludar(nombre):
  print('Hola mundo')

El parámetro nombre se comportará como una variable que únicamente existirá dentro de la función, así que podemos hacer uso de ella:

def saludar(nombre):
  print('Hola', nombre)

Para enviar el nombre, deberemos pasar el valor durante la llamada de la función como si fuera una variable o literal:

saludar('Héctor')

Con este cambio hemos transformado la función en algo dinámico que tiene comportamientos distintos dependiendo del nombre que le pasemos:

saludar('Daniel')
saludar('Javier')

En este punto es importante hacer una aclaración. Los valores que enviamos a una función se llaman argumentos, pero durante la definición nos referimos a ellos como parámetros.

¿Pero y si quisiéramos enviar un segundo argumento con el apellido? Pues deberíamos añadir un segundo parámetro en la definición:

def saludar(nombre, apellido):
  print('Hola', nombre, apellido) 

Y al ejecutarlo enviar ese segundo argumento:

saludar('Héctor', 'Costa')

Ahora bien, a diferencia de JavaScript, si intentamos llamar a la función y no pasamos uno de los parámetros, en Python dará error:

saludar('Héctor')

Para solucionarlo podemos indicar valores por defecto a los parámetros de la siguiente forma:

def saludar(nombre=None, apellido=None):
  print('Hola', nombre, apellido) 

De esa forma sí podríamos llamarla sin enviar uno de los parámetros y simplemente se mostraría None en su lugar.