Funciones: Definición
Contents
Funciones: Definición#
Important
¿Hemos utilizado funciones?
¡Claro! Hemos visto como utilizarlas, pero no como crearlas (a fondo).
def cuadrado(x):
print('El valor es:',x,'su identidad es:',id(x))
x = x**2
print('Su cuadrado es:',x,'y su identidad es:',id(x))
return x
cuadrado(3)
El valor es: 3 su identidad es: 139966416017776
Su cuadrado es: 9 y su identidad es: 139966416017968
9
En resumen, una función recibe unos argumentos y con ellos realiza una terea específica para la que fue diseñada:
La manera adecuada para definir una función es la siguiente:
Para invocar a la función que hemos definido, debemos escribir el nombre de esta y entre paréntesis los argumentos requeridos para que esta sea ejecutada así:
nombre_de_la_función (parámetros,separados,por,comas)
tal y como hemos hecho con las funciones print
, int
, float
y cuadrado
.
Las funciones se pueden definir sin argumentos, lo cual hace que ejecute sus acciones sin requerir valores de entrada y se ejecutarían de la siguiente manera:
nombre_de_la_función ()
def funcion_sin_arg1():
print('Esta función se ejecuta sin requerir valores de entrada')
def funcion_sin_arg2():
return'Esta función se ejecuta sin requerir valores de entrada'
funcion_sin_arg1()
Esta función se ejecuta sin requerir valores de entrada
funcion_sin_arg2()
'Esta función se ejecuta sin requerir valores de entrada'
La diferencia entre las dos funciones anteriores es que en la segunda tenemos un return
, es decir, la función tiene una salida que se puede almacenar para necesidades futuras.
x = funcion_sin_arg1()
print('Este es el resultado de la primera función:',x)
x = funcion_sin_arg2()
print('Este es el resultado de la segunda función:',x)
Esta función se ejecuta sin requerir valores de entrada
Este es el resultado de la primera función: None
Este es el resultado de la segunda función: Esta función se ejecuta sin requerir valores de entrada
Ejercicios:#
Cree una función que regrese como resultado el nombre de un restaurante y su NIT en una cadena de caracteres, pueden ser ficticios.
Si en dicho restaurante cada persona consume en promedio \(\$50.000\), haga una función que permira calcular el valor de la cuenta, en promedio, dado el número de comensales.
En el total calculado en el punto anterior se incluye el impuesto al consumo, cree una función que le permita conocer el valor que debería pagar sin dicho impuesto el cual asciende al \(8\%\).
Documentación:#
A las funciones que creamos, es posible añadirles documentación para que sea clara la manera de usarlas e incluso ejemplificando el uso de los diferentes argumentos de esta:
def funcion_con_doc1(x):
'''str de la variable de entrada.
La función requiere de un argumento "x", el cual puede ser un valor numérico
o una cadena de caracteres.
Su salida es el string de la variable de entrada.'''
return str(x)
Para ver esta documentación podemos hacerlo de la siguiente manera:
funcion_con_doc1
+shift
+TAB
+TAB
o con el siguiente comando:
funcion_con_doc1?
Lo más sano es escribir una descripción muy corta en la primera línea, luego una línea en blanco para continuar con la descripción más completa de la función.
Ejercicio:#
Agrega la documentación requerida para las funciones creadas en el bloque anterior de ejercicios.
Variables locales:#
Cuando creamos una función y en ella definimos alguna variable, es posible acceder a ella únicamente dentro de la función, si la intentamos llamar fuera de ella, obtendremos un error, como podemos ver a continuación:
def operaciones(x,y):
z1 = x+y
z2 = x-y
z3 = x*y
z4 = x/y
print('Suma:',z1,'Resta:',z2,'Multiplicación:',z3,'División:',z4)
operaciones(1,2)
Suma: 3 Resta: -1 Multiplicación: 2 División: 0.5
z1
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [12], in <cell line: 1>()
----> 1 z1
NameError: name 'z1' is not defined
A las variables z1
, z2
, z3
y z4
se les conoce como variables locales, ya que estas se “destruyen” al finalizar los cálculos requeridos para finalizar la ejecución de la función operaciones
.
Si tal vez se ha utilizado el mismo nombre para una variable, por fuera y por dentro de una función, no tendremos problemas por ello, pues en Python las funciones conocen su entorno trabajan con las variables locales que se han definido:
z4 = 'hola'
operaciones(1,2)
Suma: 3 Resta: -1 Multiplicación: 2 División: 0.5
z4
'hola'
Ejercicios:#
Cree las siguientes funciones, con su debida documentación:
Una función que tenga como argumentos de entrada nombre de una persona y cantidad de comensales, la función debe tener como respuesta un “recibo” en el que aparezca el nombre del restaurante, su NIT, el nombre del cliente, el valor de la factura sin impuestos y con impuestos (sug: emplee como base las funciones creadas anteriormente).
Una función que permita calcular el máximo entre dos números.
Una función que ordene de menor a mayor tres números.
Ejemplo:#
Crearemos una función que permita contar los resultados obtenidos al lanzar un dado una cierta cantidad de veces.
Para ello emplearemos la función randrange(a,b)
del paquete random
, la cual nos permite obtener un número entero arbitrario en el intervalo \([a,b-1]\) siendo \(a\) y \(b\) números enteros, por ejemplo:
import random
random.randrange(1, 7)
6
def lanzardados (n):
'''Permite contar los resultados obtenidos al lanzar un dado n veces
n es el único argumento de esta función'''
# n es la cantidad de veces que lanzaremos el dado
# Para evitar errores con números no enteros consideramos:
n = int(n)
cont1 = 0
cont2 = 0
cont3 = 0
cont4 = 0
cont5 = 0
cont6 = 0
# Debemos tomar un valor aleatorio entre 1 y 6, la cantidad de
# veces que indica n, para ello realizamos el siguiente ciclo
for i in range(1,n+1):
valor_en_el_lanzamiento = random.randrange(1, 7)
if valor_en_el_lanzamiento == 1:
cont1 += 1
elif valor_en_el_lanzamiento == 2:
cont2 += 1
elif valor_en_el_lanzamiento == 3:
cont3 += 1
elif valor_en_el_lanzamiento == 4:
cont4 += 1
elif valor_en_el_lanzamiento == 5:
cont5 += 1
elif valor_en_el_lanzamiento == 6:
cont6 += 1
print(f'Valor{"Frecuencia":>13}')
print(f'{1:>5}{cont1:>10}')
print(f'{2:>5}{cont2:>10}')
print(f'{3:>5}{cont3:>10}')
print(f'{4:>5}{cont4:>10}')
print(f'{5:>5}{cont5:>10}')
print(f'{6:>5}{cont6:>10}')
lanzardados(100)
Valor Frecuencia
1 21
2 16
3 11
4 18
5 18
6 16
Ejercicio:#
Como hemos podido ver, cada vez que ejecutamos la función anterior obtenemos diferentes resultados. Modifica este código para que permita obtener los mismos valores cada vez que ejecutamos la función con determinado valor.
Cierre#
Las funciones en Python se comportan básicamente como funciones matemáticas, reciben una entrada, ejecutan una tarea y arrojan un resultado, las variables usadas dentro de ellas se destruyen al finalizar el proceso y se conocen como variables locales.