Curso de Python: 6-Funciones

De la consola al programa
Llegó el momento de dejar la consola para comenzar a escribir código en archivos, lo que nos permitirá crear estructuras más grandes y complejas sin necesidad de repetirlas constantemente desde la consola, y, lo más  importante, que sean permanentes (al salir de la consola desaparecen). Con un editor de textos vamos a escribir el siguiente código, el cual guardaremos en un archivo llamado juego.py:

import random

# Inicializacion de variables
random.seed() # inicializa generador aleatorio
intento = 0 # contador de intentos
numero = random.randint(1,101) # entero aleatorio entre 1 y 100
print "He pensado un numero entre 1 y 100"

# Repetir mientras no se acierte
while (True):
   intento = intento + 1
   propuesto = int(raw_input("Dame un numero (1-100):"))
   if (numero<propuesto):
      print "El numero es menor que ",propuesto
   elif (numero>propuesto):
      print "El numero es mayor que ", propuesto
   else:
      print "Acertaste en", intento, "intentos"
      break; # Salir del bucle

print "Fin del juego"

Este archivo con este código Python, es lo que se denomina script (guión). Una vez guardado, desde el terminal se ejecutaría el intérprete de Python, pasando como argumento la ruta del archivo con nuestro script, para que éste sea ejecutado:

$ python juego.py

El intérprete de Python analizará el script, y si hubiera algún error sintáctico, lo mostraría en pantalla, indicando la línea, el lugar y la causa. Si no hay errores, se ejecutará el script.

Funciones
Una función es, esencialmente, un fragmento de código identificado bajo un nombre. Este código se ejecuta invocando su nombre cada vez que nuestros scripts necesiten ejecutar dicho código, como si extendiéramos el lenguaje Python con nuestros propias sentencias. Las funciones son muy útiles para compactar código repetitivo que escape al ámbito de un bucle, siguiendo el esquema de “divide y vencerás”. Veamos un ejemplo muy sencillo que ejecutaremos desde la consola:

>>> def saludo(): # define la funcion
...    print "Hola" # bloque de la funcion
...
>>> saludo()
Hola

La palabra clave def (de define), define la función saludo(), cuyo código se escribe a continuación indentado en un bloque. Cuando se invoca a la función, ésta mostrará en pantalla el literal Hola. Podemos mejorar este ejemplo mediante la parametrización, que permite pasar valores a la función:

>>> def saludo(nombre): 
...    print "Hola,",nombre
...
>>> saludo("Python")
Hola, Python

Los parámetros capturan los valores pasados desde la llamada a la función, en el mismo orden en que se pasan (en caso de haber varios parámetros). También es posible asignar un valor por defecto a un parámetro, el cual tomará en caso de omisión:

>>> def saludo(nombre='Python'):
...    print "Hola,",nombre
...
>>> saludo() # no se pasa valor
Hola, Python
>>> saludo("Tocayo") # se pasa valor
Hola, Tocayo

Cuando se definen varios parámetros, y más de uno puede tener valor por defecto, se denominan keywords (palabras clave). Las funciones requieren que los parámetros se pasen en el mismo orden, pero si se omite una keyword, y en la siguiente ha de pasarse un valor, entonces ha de pasarse el nombre de dicha keyword, junto con su valor:

>>> def saludo(nombre='Python',edad=22):
...    print "Hola,",nombre,". Tienes",edad,"años"
...
>>> saludo()
Hola, Python . Tienes 22 años
>>> saludo('Tocayo')
Hola, Tocayo . Tienes 22 años
>>> saludo(edad=38) # paso valor a keyword
Hola, Python . Tienes 38 años
>>> saludo('Tocayo',38)
Hola, Tocayo . Tienes 38 años

Además de compactar nuestros programas, las funciones permiten crear o transformar la información, retornando un nuevo valor que puede ser utilizado desde nuestros scripts:

>>> def suma(a,b):
...    return a+b
...
>>> c=suma(12,8)
>>> print c
20


Entregas:

Enlaces de interés: