Está en la página 1de 26

CLASE 5

Funciones y procedimientos

Funciones
En programacin, una funcin es una seccin de un programa que calcula un
valor de manera independiente al resto del programa.
Una funcin tiene tres componentes importantes:
1. los parmetros, que son los valores que recibe la funcin como entrada;
2. el cdigo de la funcin, que son las operaciones que hace la funcin;
3. el resultado (o valor de retorno), que es el valor final que entrega la
funcin.
En esencia, una funcin es un mini programa

Funciones de python (Mdulos)


Importacin de nombres
La sentencia import importa objetos desde un mdulo para poder ser usados en el
programa actual.
Una manera de usar import es importar slo los nombres especficos que uno desea
utilizar en el programa:
from math import sin, cos
print sin(10)
print cos(20)
En este caso, las funciones sin y cos no fueron creadas por nosotros, sino
importadas del mdulo de matemticas, donde estn definidas.
La otra manera de usar import es importando el mdulo completo, y accediendo a
sus objetos mediante un punto:
import math
print math.sin(10)
print math.cos(10)
Las dos formas son equivalentes. Como siempre, hay que optar por la que hace
que el programa sea ms fcil de entender

Funciones de python (Mdulos)


EL MDULO MATH
Python dispone de un modulo matemtico que proporciona la mayora
de las funciones matemticas habituales. Un mdulo es un archivo que
contiene una coleccin de funciones agrupadas juntas.
Antes de poder usar las funciones de un mdulo, tenemos que importarlo:
>>>import math
Para llamar a una de las funciones, tenemos que especificar el nombre
del mdulo y el nombre de la funcin, separados por un punto. A esto se
le llama notacin de punto:
decibelio = math.log10 (17.0)
angulo = 1.5
altura = math.sin(angulo)

>>> from math import exp, cos


>>> from math import pi, e
>>> print cos(pi / 3)
0.5
Tambin existen varias funciones que siempre estn disponibles sin
necesidad de importar ningn mdulo, por ejemplo:

>>>abs(-7)
7
>>>max(5,7,6)
7
La lista de las funciones que siempre estn disponibles puede verse
en:
http://docs.python.org/library/functions.html
Python viene de fbrica con muchos mdulos listos para ser usados.
Adems, es posible descargar de internet e instalar mdulos prcticamente
para hacer cualquier cosa. Por ltimo, aprenderemos a crear nuestros
propios mdulos.

EL MDULO RANDOM
Este mdulo contiene funciones para producir nmeros aleatorios (al azar):
1.- random.randrange([start,] stop [,step])
El mtodo randrange devuelve un elemento seleccionado al azar y como
su nombre lo dice, el numero aleatorio que nos va a devolver tiene que
estar dentro de un rango ingresado por nosotros.
start - punto de inicio del rango (el inicio se incluye en el rango)
stop - punto final del rango (no se incluye dentro del rango)
step - agrega un salto en el rango
>>> random.randrange(10)
7
>>> random.randrange(10)
2
>>> random.randrange(10)
5
>>>print random.randrange(1, 12, 2) #Las opciones son (1, 3, 5, 7, 9, 11)
3
>>>print random.randrange(0, 11, 2) #Las opciones son (0, 2, 4, 6, 8, 10)
2

2.- random.choice(secuencia)
Devuelve un elemento aleatorio de una secuencia no vaca
3.- random.shuffle(a)
La funcin shuffle mezcla aleatoriamente el orden de los
elementos.
>>> from random import choice, randrange,
>>> choice(['cara', 'sello'])
'cara'
>>> choice(['cara', 'sello'])
'sello'
>>> r = range(5)
>>> r
[0, 1, 2, 3, 4]
>>> shuffle(r)
>>> r
[4, 2, 0, 3, 1]

AADIR FUNCIONES NUEVAS


Hasta ahora solo hemos usado las funciones que vienen incluidas con
Python, pero tambin es posible aadir nuevas funciones. La creacin
de nuevas funciones para resolver sus problemas particulares es una de
las cosas ms tiles de los lenguajes de programacin de propsito
general.
La sintaxis de la definicin de una funcin es:
def NOMBRE( LISTA DE PARAMETROS ):
SENTENCIAS

def es la instruccin para definir una funcin nueva

FUNCIONES CON UN PARMETRO


Empezaremos definiendo una funcin muy sencilla, una que recibe un
nmero y devuelve el cuadrado de dicho nmero. El nombre que daremos
a la funcin es cuadrado. Observa este fragmento de programa: (el archivo
se llama cuadrado.py)
def cuadrado(n):
return n** 2
Para dar nombre a las funciones y a sus parmetros slo se pueden usar letras
(alfabeto ingls).
La primera lnea de la funcin es su encabezado y las instrucciones (segunda
lnea) son el cuerpo. El cuerpo debe estar corrido hacia la derecha.
La funcin contiene cdigo igual al de cualquier programa. La diferencia es
que, al terminar, debe entregar su resultado usando la sentencia return.

A continuacin mostramos una funcin que nos indica si una persona es o


no mayor de edad, notemos que devuelve un booleano.
def es_mayor_de_edad(edad):
if edad < 18:
return False
else:
return True
Las variables que son creadas dentro de la funcin (incluyendo los
parmetros y el resultado) se llaman variables locales, y slo son visibles
dentro de la funcin, no desde el resto del programa.

IMPORTAR FUNCIONES PROPIAS


Sentencia que permite que las funciones y variables definidas en un guin de
Python estn disponibles en el mbito de otro guin o en una sesin
interactiva con la terminal de Python.
Por ejemplo, suponga que las siguientes instrucciones estn en un guin
llamado clase1.py:
def muestra_tres_veces(algo):
print algo, algo, algo
g = 10
fc = Facultad de Ciencias

si importamos todo el contenido de clase1.py, podemos usar todo lo


que ah est definido:
>>> from clase1 import *
>>> g
10
>>> fc
Facultad de Ciencias'
>>> muestra_tres_veces("Hurra!")
Hurra! Hurra! Hurra!
>>>

Nota.Cuando se importa un mdulo llamado por ejemplo spam, el intrprete busca un


archivo llamado spam.py en el directorio actual, y luego en la lista de directorios
especificada por la variable de entorno PYTHONPATH.

El camino de bsqueda de los


mdulos
Cuando se importa un mdulo llamado spam, el intrprete busca un archivo
llamado spam.py en el directorio actual, y luego en la lista de directorios
especificada por la variable de entorno PYTHONPATH.
Esta tiene la misma sintxis que la variable de shell PATH, o sea, una lista de
nombres de directorios.
Cuando PYTHONPATH no est configurada, o cuando el archivo no se encuentra
all, la bsqueda continua en un camino por omisin que depende de la
instalacin; en Unix, este es normalmente
.:/usr/lib/python.

Ejercicio
1.
2.

Cree un programa que calcule el factorial de un nmero.


Cree una funcin donde ingrese una lista y nos devuelva el menor
elemento de esa lista.
def factorial(n):
f=1
for i in range(1, n + 1):
f *= i
return f

def min(l):
l.sort()
return l[0]

FUNCIONES CON VARIOS PARMETROS


Vamos a definir ahora una funcin con dos parmetros: una funcin
que devuelve el valor del rea de un rectngulo dadas su altura y su
anchura:

def area(b,h):
return b*h/2

A continuacin mostramos un programa que halla el mnimo de dos


nmeros
def mini(a,b):
m=0
if a<b:
m=a
else:
m=b
return m

Ejercicio
Usando la funcin factorial, cree la funcin comb(m,n) que nos permita hallar el
combinatorio de m en n.
def comb(m, n):
fact_m = factorial(m)
fact_n = factorial(n)
fact_m_n = factorial(m - n)
c = fact_m / (fact_n * fact_m_n)
return c

FUNCIONES SIN PARMETROS


lo nico que debes tener presente es que es obligatorio poner parntesis
a continuacin del identificador, tanto al definir la funcin como al
invocarla.
A continuacin mostramos un programa que no recibe valores pero
devuelve uno
def lee_ent():
n=input('ingresa un entero: ')
return n
>>>n = lee_entero()

PROCEDIMIENTOS: FUNCIONES SIN


DEVOLUCIN DE VALOR
No todas las funciones devuelven un valor. Una funcin que no devuelve un
valor se denomina procedimiento. Y para qu sirve una funcin que no
devuelve nada? Bueno, puede, por ejemplo, mostrar mensajes o resultados
por pantalla.
def misaludo():
print 'hola a todos'
print 'Esto es python
def imprimir_datos(nombre, apellido, rol, dia, mes, anyo):
print 'Nombre completo:', nombre, apellido
print 'Rol:', rol
print 'Fecha de nacimiento:', dia, '/', mes, '/', anyo
imprimir_datos('Perico', 'Los Palotes', '201101001-1', 3, 1, 1993)
imprimir_datos('Fulano', 'De Tal', '201101003-3', 14, 5, 1990)

FUNCIONES QUE DEVUELVEN VARIOS


VALORES
En principio una funcin puede devolver un solo valor con la sentencia
return. Pero sabemos que una lista es un objeto que contiene una
secuencia de valores. Si devolvemos una lista podemos, pues, devolver
varios valores.
Por ejemplo, una funcin puede devolver al mismo tiempo el mnimo
y el mximo de dos nmeros:
def minmax(a,b):
if a<b:
min=a
max=b
else:
min=b
max=a
return [min,max]

Cmo podramos llamar a esa funcin?


a = minmax(10, 5)
print El mnimo es, a[0]
print El mximo es, a[1]

[minimo, mximo] = minmax(10, 5)


print El mnimo es, mnimo
print El mximo es, mximo

VARIABLES LOCALES Y GLOBALES


Observa que en el cuerpo de las funciones es posible definir y usar
variables. Vamos a estudiar con detenimiento algunas propiedades de las
variables definidas en el cuerpo de una funcin y en que se diferencian de
las variables que definimos fuera de cualquier funcin, es decir, en el
denominado programa principal.
a=3
def f():
b=4
print a
print b
return
f()
print a
print b

#3
#4

#3
# Error!

a=3
def f():
a=0
print a
return
f()
print a

#0

# 3 . No se modifica

c=3
def f():
global c
c=0 # Esto modifica el objeto global
print c # 0
return
f()
print

La sentencia global evita que al


declarar un objeto en una funcin,
se cree un nuevo objeto con el
mismo nombre pero de mbito
local. Por tanto permite modicar el
objeto global.

c #0

global c
#ERROR, esto no sirve de nada
c=3
def f():
c=0
# Esto es un objeto local
print c # 0
return
f()
print c
#3 el global no ha cambiado

En muchos lenguajes, para hacer


que una variable sea global, la
declaramos global en la zona global
del cdigo, haremos un cdigo
similar a este, pero que en python
es incorrecto

l= ["uno","dos"]
def f():
print l # ["uno","dos"]
l.pop()

Un objeto puede ser modificado


en una funcin local, a pesar de
no estar declarado global

>>>f()
>>>print l # ["uno"] .

l= ["uno","dos"]
def f():
l=["uno"]
print l
# ["uno"]
>>>f()
>>>print l

# ["uno","dos"]

En el caso de que la modificacin se


haga redefiniendo el objeto (no
mediante mtodos), como ya
sabemos, implica la declaracin
implcita de un objeto nuevo, local,
que oculta al objeto global. Por
tanto, el objeto global no es
modificado.

Resumen:
1. Los objetos declarados fuera de una funcin son globales
2. Los objetos declarados dentro de una funcin son locales
3. Los objetos globales siempre se pueden leer dentro de una
funcin
4. Para modificar un objeto global dentro de una funcin hay que
usar global dentro de la funcin o sino (listas) modificarlo
mediante sus mtodos.

LLAMADAS RECURSIVAS
Se denomina llamada recursiva (o recursividad), a aquellas funciones que
en su algoritmo, hacen referencia s misma.
A continuacin mostramos un programa recursivo que halla el factorial de
un nmero.

def fact(num):
if num <= 1:
return 1
else:
return num*fact(num-1)

Ejercicios
1.- Cree un programa que nos muestre los n primeros nmeros de Fibonacci.
2.-Cree una funcin que nos permita hallar el valor de
1 1
1
= 1 + + + +
2 3

Para cualquier valor de n.


def fib(n):
if n > 1:
return fib(n - 1) + fib(n - 2)
else:
return 1