Está en la página 1de 27

Informática - Grado en Física 2022-2023

Definición de funciones
Índice de contenidos
I. Motivación
II. Definición de funciones
III. Argumentos
IV. La instrucción de retorno
V. Variables locales y visibilidad
VI. Documentación
VII.Haciendo una función

Informática - Grado en Física - UMU 2


Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: resolver ecuación de segundo grado

a = 2
b = -6
c = 4

d = (b**2 - 4*a*c)**(1/2)

x1 = (-b+d)/2/a
x2 = (-b-d)/2/a
(2.0, 1.0)
x1,x2
Informática - Grado en Física - UMU 3
Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: resolver ecuación de segundo grado

a = 1
b = 0
c = -9

d = (b**2 - 4*a*c)**(1/2)
Replicar todo el código
x1 = (-b+d)/2/a resulta poco práctico
x2 = (-b-d)/2/a
(3.0, -3.0)
x1,x2
Informática - Grado en Física - UMU 4
Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: calcular área de polígono irregular Una misma tarea se necesita
en varios pasos de un
▪ Descomposición en triángulos
programa más grande

✓ El área total es la suma de las áreas de los


triángulos PQR y PSR
✓ Área de un triángulo (formula de Herón):

Informática - Grado en Física - UMU 5


Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: calcular área de polígono irregular
▪ Descomposición en triángulos
#Ejemplo fórmula de Herón
a = 3
b = 5
c = 4

from math import sqrt

s = (a+b+c)/2
r = s*(s-a)*(s-b)*(s-c) 6.0
sqrt(r)
Informática - Grado en Física - UMU 6
Motivación
➢Resolver diferentes instancias de un mismo problema
área PQR: 6.999999999999996
❑Ejemplo: calcular área de polígono irregular area PSR: 8.500000000000002
área total: 15.499999999999996
▪ Descomposición en triángulos
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 7
Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: calcular área de polígono irregular Una misma tarea se necesita
en varios pasos de un
▪ Descomposición en triángulos
programa más grande
✓Resultado correcto
 Mucho código repetido
 2 veces la fórmula de Herón
 6 veces la distancia entre vértices

Informática - Grado en Física - UMU 8


Definición de funciones
➢Resolver el mismo problema con diferentes datos de entrada ➔
subrutina (equivalente informático del concepto de función)
❑Ejemplo: resolver ecuación de segundo grado
a = 2
b = -6
c = 4

d = (b**2 - 4*a*c)**(1/2)

x1 = (-b+d)/2/a
x2 = (-b-d)/2/a

x1,x2
Informática - Grado en Física - UMU 9
Definición de funciones
➢Resolver el mismo problema con diferentes datos de entrada ➔
subrutina (equivalente informático del concepto de función)
❑Ejemplo: resolver ecuación de segundo grado
def ecu2g(a,b,c):
d = (b**2 - 4*a*c)**(1/2)
ecu2g(2,-6,4)
x1 = (-b+d)/2/a
x2 = (-b-d)/2/a
(2.0, 1.0)
return (x1,x2)

ecu2g(1,0,-9)

(3.0, -3.0)
Informática - Grado en Física - UMU 10
Definición de funciones
➢Función ≈ bloque de instrucciones con nombre
➢El nombre de la función debe ayudar a recordar su propósito
➢Cada vez que la usamos, ‘invocamos’ o ‘llamamos’ a la función
➢Parámetros/argumentos
❑Parámetros: permiten ejecutar un mismo algoritmo sobre diferentes
datos
❑Argumentos: datos específicos que se remiten a la función en cada
invocación con los que se reevalúa el código

Informática - Grado en Física - UMU 11


Definición de funciones
Palabra clave que indica Definición Tupla con los parámetros
que vamos a crear una
nueva función def ecu2g(a,b,c): Finaliza la cabecera de la
función
Nombre elegido
d = (b**2 - 4*a*c)**(1/2)
x1 = (-b+d)/2/a Cuerpo de la función
Variables locales: invisibles x2 = (-b-d)/2/a
fuera de la función
return (x1,x2)
Indicar el resultado final
de la función (opcional)

Llamada/Invocación
Argumentos con los que
Nombre de la función se ejecutará la función
invocada ecu2g(2,-6,4)
Resultado devuelto por la
(2.0, 1.0) función

Informática - Grado en Física - UMU 12


Definición de funciones
➢¡Ya hemos hecho uso de numerosas funciones!
range(n) np.random.rand(n)
print(...) np.random.randint(a,b,n)
np.arange(n) np.sin(n)
np.linspace(i,j,n) np.radians(n)
abs(n) plt.plot(x,y)
np.sqrt(n) plt.hist(x)
np.cos(n) input(...)
type(x) l.append(n)
np.sum(a) l.remove(n)
np.random.randn(n) enumerate(l)
Informática - Grado en Física - UMU 13
Definición de funciones
➢Ejemplos
def f(x): f(2) 7
return 2*x+3 f(2+f(-3)) 1
[f(x) for x in [0.1,0.2,0.3]] [3.2, 3.4, 3.6]

Asignación de variables vs. Definición de funciones


n = 2 g() 20 • La asignación almacena el valor y ya no se
h 20 modifica (aunque cambien otras variables)
h = 10*n
n = 5
g()
• La llamada a la función, con argumentos
def g(): 50
entre paréntesis, recalcula el bloque de
return 10*n h 20
código cada vez
Informática - Grado en Física - UMU 14
Argumentos
➢Parámetros opcionales / Argumentos opcionales
❑Definidos con un valor por omisión
def f(x, y = 0): f(2,3) 7
return x**2 + y
f(2) 4
f(x=5) 25

• En ocasiones, queda más claro si pasamos los argumentos con su nombre.


• Especialmente útil en funciones con muchos argumentos opcionales (p.ej.,
funciones para dibujar que admiten argumentos para elegir colores, estilo de
línea, etc.).
• Poner nombre a argumentos ayuda a recordar su papel en la función.
Informática - Grado en Física - UMU 15
La instrucción de retorno
➢return termina inmediatamente la función (aunque queden instrucciones
detrás en el cuerpo)

def f(x): f(-3) 0


return x+5 def f(x): 25
f(5)
b = 3 if x < 0:
print('Hola') return 0
return x**2
f(2)
7

Informática - Grado en Física - UMU 16


La instrucción de retorno
➢También hay funciones sin return → procedimientos
❑Devuelve tipo especial llamado None
❑Hacer cualquier tipo de tarea útil: imprimir resultados, dibujar gráficas, preparar
variables auxiliares, etc.
def f(x): def f(x):
a = x+5 print(x,x)

f(10) f(5) ¿Cuándo


5 5
print(f(5))
termina la
print(f(10)) 5 5 función?
None None
Informática - Grado en Física - UMU 17
Variables locales y visibilidad
➢Variable local = definida dentro del cuerpo de una función
❑Solo es visible dentro de la propia función
❑‘Oculta’ otra posible definición de ese nombre en otras partes del código
❑Al principio de cada llamada las variables locales se crean y al final se destruyen
a = 5
b = 8
Acceso a variable global
Oculta el valor de la def f(x):
variable global ‘b’
b = a+x
print(b)

f(1) 6
print(b) 8
Informática - Grado en Física - UMU 18
Variables locales y visibilidad
➢Redefinir nombre global con global
❑Listas (objetos mutables) se pueden modificar sin global
❑Función pura = no modifica ningún dato global (esto es lo aconsejable, salvo en casos
justificados ➔ misma función puede ser útil para distintos programas)
a = 5
b = 8

Redefine el valor de la
def f(x):
variable global ‘b’ global b
b = a+x
print(b)

f(1) 6
print(b) 6 Informática - Grado en Física - UMU 19
Documentación
➢Uso de ‘cadenas de documentación’ o docstring

Informática - Grado en Física - UMU 20


Haciendo una función
➢Calcular el área de un polígono irregular

P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 21
Haciendo una función
➢Calcular el área de un polígono irregular
1. Identificar qué parte convertir en función
•a) Resolver
Distanciadiferentes
entre vértices
instancias de un mismo problema
•b) Resolver
Área de el
unmismo
triángulo
problema con diferentes datos de entrada
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 22
Haciendo una función
➢Calcular el área de un polígono irregular
2. Identificar la entrada
a) Distancia entre vértices: coordenadas de los vértices
b) Área de un triángulo: lados

P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 23
Haciendo una función
➢Calcular el área de un polígono irregular
3. Identificar el algoritmo
a) Distancia entre vértices: Teorema de Pitágoras
b) Área de un triángulo: Fórmula de Herón

P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 24
Haciendo una función
➢Calcular el área de un polígono irregular
4. Identificar el valor de retorno
a) Distancia entre vértices: distancia
b) Área de un triángulo: área

P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 25
Haciendo una función
➢Calcular el área de un polígono irregular
5. Definir la función
a) Distancia entre vértices: distancia
b) Área de un triángulo: area_triangulo

def distancia(v1x,v1y,v2x,v2y):
“““Calcula distancia entre vértices con Teorema de Pitágoras”””
return sqrt( (v1x-v2x)**2 + (v1y-v2y)**2 )

def area_triangulo(a,b,c):
“““Devuelve el área de un triángulo aplicando Fórmula de Herón”””
s = (a+b+c)/2
r = s*(s-a)*(s-b)*(s-c)
return sqrt(r)

Informática - Grado en Física - UMU 26


Haciendo una función
➢Calcular el área de un polígono irregular
6. Invocar a la función

P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = distancia(px,py,sx,sy)
R = rx,ry = (5,4)
b = distancia(px,py,rx,ry)
S = sx,sy = (4,7)
c = distancia(sx,sy,rx,ry)
# triángulo PQR
a = distancia(px,py,qx,qy)
area2 = area_triangulo(a,b,c)
b = distancia(px,py,rx,ry)
print('area PSR:',area2)
c = distancia(qx,qy,rx,ry)
area1 = area_triangulo(a,b,c)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 27

También podría gustarte