clase 5 python
TRANSCRIPT
-
8/18/2019 Clase 5 Python
1/26
CLASE 5
Funciones y procedimientos
-
8/18/2019 Clase 5 Python
2/26
Funciones
En programación, una función es una sección de un programa que calcula unvalor de manera independiente al resto del programa.
Una función tiene tres componentes importantes:
1. los parámetros, que son los valores que recibe la función como entrada;2. el código de la función, que son las operaciones que hace la función;3. el resultado (o valor de retorno), que es el valor final que entrega la
función.
En esencia, una función es un mini programa
-
8/18/2019 Clase 5 Python
3/26
Importación de nombres
Funciones de python (Módulos)
La sentencia import importa objetos desde un módulo para poder ser usados en elprograma actual.
Una manera de usar import es importar sólo los nombres específicos que uno deseautilizar 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 módulo de matemáticas, donde están definidas.
La otra manera de usar import es importando el módulo completo, y accediendo asus 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 más fácil de entender
-
8/18/2019 Clase 5 Python
4/26
Funciones de python (Módulos)
EL MÓDULO MATHPython dispone de un modulo matemático que proporciona la mayoría
de las funciones matemáticas habituales. Un módulo es un archivo que
contiene una colección de funciones agrupadas juntas.
Antes de poder usar las funciones de un módulo, tenemos que importarlo:
>>>import math
Para llamar a una de las funciones, tenemos que especificar el nombre
del módulo y el nombre de la función, separados por un punto. A esto se
le llama notación de punto:
decibelio = math.log10 (17.0)
angulo = 1.5
altura = math.sin(angulo)
-
8/18/2019 Clase 5 Python
5/26
También existen varias funciones que siempre están disponibles sin
necesidad de importar ningún módulo, por ejemplo:
>>>abs(-7)
7>>>max(5,7,6)
7
La lista de las funciones que siempre están disponibles puede verse
en:http://docs.python.org/library/functions.html
>>> from math import exp, cos
>>> from math import pi, e
>>> print cos(pi / 3)
0.5
Python viene «de fábrica» con muchos módulos listos para ser usados.
Además, es posible descargar de internet e instalar módulos prácticamente
para hacer cualquier cosa. Por último, aprenderemos a crear nuestros
propios módulos.
http://docs.python.org/library/functions.htmlhttp://docs.python.org/library/functions.html
-
8/18/2019 Clase 5 Python
6/26
EL MÓDULO RANDOMEste módulo contiene funciones para producir números aleatorios (al azar):
1.- random.randrange([start,] stop [,step])
El método randrange devuelve un elemento seleccionado al azar y comosu 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
-
8/18/2019 Clase 5 Python
7/26
>>> 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]
2.- random.choice(secuencia)Devuelve un elemento aleatorio de una secuencia no vacía
3.- random.shuffle(a)La función shuffle mezcla aleatoriamente el orden de los
elementos.
-
8/18/2019 Clase 5 Python
8/26
AÑADIR FUNCIONES NUEVAS
Hasta ahora solo hemos usado las funciones que vienen incluidas conPython, pero también es posible añadir nuevas funciones. La creación
de nuevas funciones para resolver sus problemas particulares es una de
las cosas más útiles de los lenguajes de programación de propósito
general.
La sintaxis de la definición de una función es:
def NOMBRE ( LISTA DE PARAMETROS ):SENTENCIAS
def es la instrucción para definir una función nueva
-
8/18/2019 Clase 5 Python
9/26
FUNCIONES CON UN PARÁMETRO
Empezaremos definiendo una función muy sencilla, una que recibe unnúmero y devuelve el cuadrado de dicho número. El nombre que daremos
a la función 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 parámetros sólo se pueden usar letras
(alfabeto inglés).
La primera línea de la función es su encabezado y las instrucciones (segunda
línea) son el cuerpo. El cuerpo debe estar corrido hacia la derecha.
La función contiene código igual al de cualquier programa. La diferencia es
que, al terminar, debe entregar su resultado usando la sentencia return.
-
8/18/2019 Clase 5 Python
10/26
def es_mayor_de_edad(edad):
if edad < 18:
return Falseelse:
return True
A continuación mostramos una función que nos indica si una persona es o
no mayor de edad, notemos que devuelve un booleano.
Las variables que son creadas dentro de la función (incluyendo los
parámetros y el resultado) se llaman variables locales, y sólo son visibles
dentro de la función, no desde el resto del programa.
-
8/18/2019 Clase 5 Python
11/26
IMPORTAR FUNCIONES PROPIASSentencia que permite que las funciones y variables definidas en un guión de
Python estén disponibles en el ámbito de otro guión o en una sesióninteractiva con la terminal de Python.
Por ejemplo, suponga que las siguientes instrucciones están en un guión
llamado clase1.py:
def muestra_tres_veces(algo):
print algo, algo, algo
g = 10
fc = «Facultad de Ciencias»
-
8/18/2019 Clase 5 Python
12/26
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 módulo llamado por ejemplo spam, el intérprete busca unarchivo llamado spam.py en el directorio actual, y luego en la lista de directoriosespecificada por la variable de entorno PYTHONPATH.
-
8/18/2019 Clase 5 Python
13/26
El camino de búsqueda de los
módulos Cuando se importa un módulo llamado spam, el intérprete busca un archivollamado spam.py en el directorio actual, y luego en la lista de directorios
especificada por la variable de entorno PYTHONPATH.Esta tiene la misma sintáxis que la variable de shell PATH, o sea, una lista denombres de directorios.
Cuando PYTHONPATH no está configurada, o cuando el archivo no se encuentraallí, la búsqueda continua en un camino por omisión que depende de la
instalación; en Unix, este es normalmente
.:/usr/lib/python.
-
8/18/2019 Clase 5 Python
14/26
Ejercicio
1. Cree un programa que calcule el factorial de un número.2. Cree una función donde ingrese una lista y nos devuelva el menor
elemento de esa lista.
def min(l):
l.sort()
return l[0]
def factorial(n):
f = 1for i in range(1, n + 1):
f *= i
return f
-
8/18/2019 Clase 5 Python
15/26
FUNCIONES CON VARIOS PARÁMETROSVamos a definir ahora una función con dos parámetros: una función
que devuelve el valor del área de un rectángulo dadas su altura y suanchura:
def area(b,h):
return b*h/2
def mini(a,b):
m=0
if a
-
8/18/2019 Clase 5 Python
16/26
EjercicioUsando la función factorial, cree la función 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
-
8/18/2019 Clase 5 Python
17/26
FUNCIONES SIN PARÁMETROSlo único que debes tener presente es que es obligatorio poner paréntesis
a continuación del identificador, tanto al definir la función como alinvocarla.
def lee_ent():
n=input('ingresa un entero: ')
return n
>>>n = lee_entero()
A continuación mostramos un programa que no recibe valores pero
devuelve uno
-
8/18/2019 Clase 5 Python
18/26
PROCEDIMIENTOS: FUNCIONES SINDEVOLUCIÓN DE VALORNo todas las funciones devuelven un valor. Una función que no devuelve un
valor se denomina procedimiento. ¿Y para qué sirve una función 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, apellidoprint '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)
-
8/18/2019 Clase 5 Python
19/26
FUNCIONES QUE DEVUELVEN VARIOSVALORES
En principio una función 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 función puede devolver al mismo tiempo el mínimoy el máximo de dos números:
def minmax(a,b):
if a
-
8/18/2019 Clase 5 Python
20/26
¿Cómo podríamos llamar a esa función?
a = minmax (10, 5)
print ’El mínimo es’, a[0]print ’El máximo es’, a[1]
[minimo, máximo] = minmax(10, 5)
print ’El mínimo es’, mínimo print ’El máximo es’, máximo
-
8/18/2019 Clase 5 Python
21/26
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 función y en que se diferencian de
las variables que definimos fuera de cualquier función, es decir, en el
denominado programa principal.
a=3
def f():
b=4
print a # 3
print b # 4
return
f()
print a # 3
print b # Error!
a=3
def f():
a=0
print a # 0
returnf()
print a # 3 . No se modifica
-
8/18/2019 Clase 5 Python
22/26
c=3
def f():
global c
c=0 # Esto modifica el objeto globalprint c # 0
return
f()
print c #0
La sentencia global evita que al
declarar un objeto en una función,
se cree un nuevo objeto con el
mismo nombre pero de ámbito
local. Por tanto permite modicar el
objeto global.
global c #ERROR, esto no sirve de nada
c=3
def f():
c=0 # Esto es un objeto localprint 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 código, haremos un códigosimilar a este, pero que en python
es incorrecto
-
8/18/2019 Clase 5 Python
23/26
l= ["uno","dos"]
def f():
print l # ["uno","dos"]
l.pop()
>>>f()
>>>print l # ["uno"] .
Un objeto puede ser modificado
en una función local, a pesar de
no estar declarado global
l= ["uno","dos"]
def f():
l=["uno"]
print l # ["uno"]
>>>f()
>>>print l # ["uno","dos"]
En el caso de que la modificación se
haga redefiniendo el objeto (no
mediante métodos), como ya
sabemos, implica la declaración
implícita de un objeto nuevo, local,
que oculta al objeto global. Por
tanto, el objeto global no es
modificado.
-
8/18/2019 Clase 5 Python
24/26
Resumen:1. Los objetos declarados fuera de una función son globales
2. Los objetos declarados dentro de una función son locales
3. Los objetos globales siempre se pueden leer dentro de unafunción
4. Para modificar un objeto global dentro de una función hay que
usar global dentro de la función o sino (listas) modificarlo
mediante sus métodos.
-
8/18/2019 Clase 5 Python
25/26
LLAMADAS RECURSIVAS
Se denomina llamada recursiva (o recursividad), a aquellas funciones que
en su algoritmo, hacen referencia sí misma.
A continuación mostramos un programa recursivo que halla el factorial de
un número.
def fact(num):if num
-
8/18/2019 Clase 5 Python
26/26
Ejercicios
1.- Cree un programa que nos muestre los n primeros números de Fibonacci.2.-Cree una función que nos permita hallar el valor de
= 1 +1
2 +
1
3 + ⋯ +
1
Para cualquier valor de n.
def fib(n):
if n > 1:return fib(n - 1) + fib(n - 2)
else:
return 1