#08 – Funciones (I)

En las lecciones anteriores ya hemos utilizado algunas de las funciones que Python lleva implementadas. Por ejemplo, es muy cómodo utilizar len(lista) en lugar de tener que crear un bucle que cuente todos los elementos. ¿Acaso no sería maravilloso poder crear nuestras propias funciones y resolver problemas con una sola línea de código?

Definición de Funciones

Crear nuestras propias funciones es de lo más sencillo. Por ejemplo, a continuación te muestro una función que calcula el doble de un número:

def doble(x):
	resultado = x * 2
	return resultado

Estudiemosla parte a parte.

Cabecera

def doble(x):

Lo primero que nos llama la atención es la palabra def (define). Esta se utiliza para indicarle a Python que a continuación se va a definir una nueva función. A continuación aparece el nombre de la función, doble. Podemos utilizar cualquier expresión como nombre de una función, excepto aquellas palabras reservadas por el lenguaje (if, else, while, etc.) y siempre sin espacios. Tras el nombre, siempre entre paréntesis, el nombre de la variable sobre la que se operará. Se finaliza la definición siempre con dos puntos.

Cuerpo

	resultado = x * 2
	return resultado

Consiste en el comportamiento de la función, aquello que hará. En nuestro caso son sólo dos líneas, pero podrían ser un número indeterminado (aunque es recomendable que no sean más de 30 o 40). Todas las líneas del cuerpo deben ir indentadas a la derecha con respecto a la cabecera. De no ser así, Python no la considerará parte de la función, y puede ocasionar errores.

Devolución

return resultado

Nuestra función termina devolviendo el resultado de la misma. Si no fuera por la sentencia return, no importaría los cálculos que realizáramos, nunca seríamos capaces de devolvérselos al programa principal. Con return sólo podemos devolver un elemento, pero este puede pertenecer a cualquier tipo (incluso el resultado de expresiones, por ejemplo x*2). Además, la función finaliza con la ejecución de la sentencia return, sin importar si hay código a continuación (algo muy útil al combinarlo con la sentencia if).

Llamada de Funciones

numero = doble(2)
print(doble(3))

Nuestra función se llama igual que las que ya conocemos: podemos asignarla a una variable para almacenar su valor, o simplemente mostrarla por pantalla.

Diversos números de Parámetros

Podemos definir funciones que reciban cualquier número de parámetros, aunque más de 5 suele considerarse abusivo. Simplemente debemos separarlos por comas, y no repetir nombres:

def producto(par1, par2, par3):
	return par1*par2*par3

De la misma forma, también es posible crear funciones que no reciban ningún parámetro:

def lee_cadena():
	return input("Introduce una cadena")

Procedimientos

Existen un tipo especial de funciones. Para diferenciarlas, son llamadas procedimientos, y se destacan porque no devuelven ningún valor. ¿Esto sirve para algo? Bueno, simplemente pueden mostrar algo por pantalla. Que no devuelvan un valor no quiere decir que no produzcan resultados.

def saludo(nombre):
	print("Hola "+nombre)

Variables locales y Globales

Como se ha podido ver en los ejemplos anteriores, dentro de una función pueden declararse nuevas variables. Estas son conocidas como variables locales, y sólo son accesibles desde la función en la que se han declarado.

Definición de Variables

def funcion01():
	numero = 1
	print(numero)
	
numero = 2
funcion01()
print(numero)

Vamos a trabajar con un ejemplo para entender bien cómo funcionan las variables locales. En el código mostrado se puede observar que existen dos variables con el nombre «numero». ¿Cómo es eso posible? Sin entrar en detalles técnicos, simplemente diremos que cada función dispone de su propio espacio para declaración de variables, por lo que un mismo nombre de variable puede repetirse siempre y cuando esté en funciones diferentes.

Ahora realicemos una traza del programa escrito. ¿Qué números se mostraría por pantalla? En la línea 5 se le asigna el valor 2. Posteriormente se llama a la función, donde se le asigna el valor 1, y se muestra por pantalla. Tras finalizar la función, se vuelve a mostrar por pantalla. En el primer print, no hay dudas de que se trata de un 1. ¿Y en el segundo? Pues en este caso se muestra un 2, ya que, aunque tienen el mismo nombre, en realidad no son la misma variable.

Acceso a Variables Globales

Para que una función modifique una variable externa a la misma, esta ha de ser una variable global. No cualquier variable externa sirve como variable global. Para que una función pueda acceder a ella, dicha variable ha de estar declarada antes de la declaración de la función. Además, debemos indicarle a la función que se trata de una variable global.

numero = 2

def sumaDos():
    global numero
    numero = numero + 2
	
sumaDos()
print(numero)

Vemos en la línea 4 cómo hemos declarado la variable numero como una variable global. De no estar esa línea, el programa generaría un error al intentar acceder a una variable no referenciada.

La Función main()

La función main() es una función especial, que viene a ser el código principal que se ejecutará; en otras palabras, cuando se lanza un programa, su ejecución comienza por la función main(). En Python esto no es así (pero si en la mayoría de lenguajes, sobretodo los compilados), y el programa principal viene a ser el código escrito fuera de las funciones. No obstante, es una buena práctica definir la función y finalizar el programa llamando a la función main(). El anterior código quedaría así:

numero = 2

def sumaDos():
    global numero
    numero = numero + 2
    
def main():	
    sumaDos()
    print(numero)

main()

Organización de Código

Llegados a este punto, nuestros programas empiezan a contar con diversas secciones. Aunque pueden estar intercaladas (por ejemplo, definir una función dentro del programa principal), para facilitar la legibilidad del código se recomienda seguir una estructura. Al seguir la misma estructura el conjunto de programadores, resulta más sencillo la lectura de código ajeno. El orden recomendado es:

  1. Importación de Módulos (se verá más adelante).
  2. Variables Globales.
  3. Definición de Funciones.
  4. Función main().
  5. Programa Principal.

El siguiente programa utiliza el Teorema de Pitágoras para calcular la hipotenusa de un triángulo. Su estructura es la indicada anteriormente.

# IMPORTACIÓN DE MÓDULOS
from math import sqrt

# VARIABLES GLOBALES SI LAS HUBIERAN

# DEFINICIÓN DE FUNCIONES
def cuadrado(x):
    return x*x

def pitagoras(a, b):
    c = sqrt(cuadrado(a)+cuadrado(b))
    return c
    
# DEFINICIÓN DE LA FUNCIÓN MAIN()
def main():
    cateto01 = float(input("Introduce el primer cateto: "))
    cateto02 = float(input("Introduce el segundo cateto: "))
    print("La hipotenusa es: "+str(pitagoras(cateto01, cateto02)))

# PROGRAMA PRINCIPAL
main()

Con esto ya deberíais de ser capaces de crear vuestras propias funciones, y prácticamente realizar cualquier programa que se os ocurra. El curso se acerca a su final, y nada mejor para esperar que realizar los ejercicios 9 y 10.


¿Quieres estar al día de todo lo publicado en el blog?
Pues para ello puedes suscribirte mediante ese bonito formulario que tienes más abajo, o simplemente puedes seguirme en mi cuenta personal de Twitter (o ambas cosas si te animas :D)

Marcar como favorito enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *