Introducción a funciones y módulos

Python tiene una serie de de funciones y módulos incluidos en su instalación estándar.

Las funciones incluidas pueden pensarse como instrucciones que realizan una determinada tarea y pueden ejecutarse solamente indicando el identificador asociado y la notación correspondiente (print(), type() float(), int(), etc.).

Los módulos son agrupaciones de funciones, que si se quieren utilizar, tienen que importarse del módulo en el cual se encuentran.

Funciones

Functiones incorporadas

abs()

delattr()

hash()

memoryview()

set()

all()

dict()

help()

min()

setattr()

any()

dir()

hex()

next()

slice()

ascii()

divmod()

id()

object()

sorted()

bin()

enumerate()

input()

oct()

staticmethod()

bool()

eval()

int()

open()

str()

breakpoint()

exec()

isinstance()

ord()

sum()

bytearray()

filter()

issubclass()

pow()

super()

bytes()

float()

iter()

print()

tuple()

callable()

format()

len()

property()

type()

chr()

frozenset()

list()

range()

vars()

classmethod()

getattr()

locals()

repr()

zip()

compile()

globals()

map()

reversed()

__import__()

complex()

hasattr()

max()

round()

a = input("escriba algo")
---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
<ipython-input-1-e7bddc30a437> in <module>
----> 1 a = input("escriba algo")

~/opt/anaconda3/lib/python3.8/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
    855         """
    856         if not self._allow_stdin:
--> 857             raise StdinNotImplementedError(
    858                 "raw_input was called, but this frontend does not support input requests."
    859             )

StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.
print(a)
print(type(a))
algo
<class 'str'>

Las funciones pueden necesitar argumentos de entrada (datos dentro de los paréntesis) o no, pueden hacer una tarea y regresar una valor calculado por dicha tarea o no. Por el momento con esta información basta

Módulos

Existe una cantidad considerable de módulos incorporados en la instalación estándar (Anaconda tiene estos y otras más), para consultar la lista de módulos estándar instalados, se puede revisar el sigueinte enlace. Algunos módulos estándar son los siguientes

  • getpass. Lectura portátil de contraseñas y recuperación del ID de usuario.

  • urllib.request. Biblioteca para abrir URL.

  • json. Codifica y decodifica el formato JSON.

  • math. Funciones matemáticas

Para hacer uso de las funciones de los módulos, estos se puden importar de varias formas.

import MODULE1, MODULE2, ..., MODULEN

import MODULE as ANYTHING

from MODULE import FUNCTION_IN_MODULE1, FUNCTION_IN_MODULE2 

from MODULE import *

Importamos del módulo math como ejemplo

import math

math.pi
3.141592653589793
import math as m

m.cos(m.pi)
-1.0
from math import sin, pi

sin(pi/2)
1.0
from math import *

atan(sin(pi/4)/cos(pi/4))
0.7853981633974483
pi/4
0.7853981633974483

Funciones y módulos no estándar

Se pueden definir funciones y utilizar módulos no estándar, para resolver diferentes problemas.

Se tiene el siguiente problema:

El valor acumulado de una cuenta de ahorros que se basa en pagos periódicos puede calcularse con la ecuación de anualidad vencida

\[A = \frac{P}{i}((1+i)^n-1)\]

En esta ecuación, \(A\) es el monto de la cuenta, \(P\) es la cantidad que se deposita periódicamente e \(i\) es la tasa de interés por periodo para los \(n\) periodos de depósito. A un ingeniero le gustaría tener una cuenta de ahorros con un monto de \(750 000\) dólares al momento de retirarse dentro de 20 años, y puede depositar \(l500\) dólares mensuales para lograr dicho objetivo. ¿Cuál es la tasa mínima de interés a que puede inverirse ese dinero, suponiendo que es un interés compuesto mensual?

La solución es encontrar \(i\) para los datos dados. Este problema no tiene solución cerrada, entonces se resuelve con aproximaciones numéricas. Para consultar uno de los métodos para las soluciones numéricas, comparto el siguiente video (suscribete y dale like XD)

El probleam se puede escribir como

\[A - \frac{P}{i}((1+i)^n-1) = 0 \]

entonces encontrar el valor de \(i\) es encontrar la raíz de la siguiente función

\[f(i) = A - \frac{P}{i}((1+i)^n-1) \]

Entonces, implementamos do cosas,

  1. Una función que realice el calculo de la función \(f\)

  2. Buscamos un módulo (afortunadamente existe) que tenga impeentados los algoritmos para encontrar aproximaciones de raíces de funciones.

Se instala el módulo de scipy en caso que no se tenga instalado

conda install scipy

Implementamos la función \(f\)

def f(i):
    A = 750000
    P = 1500
    n = 20 * 12
    return(A - (P / i) * ((1 + i) ** n - 1))

Se importa el módulo y la función correspondiente

from scipy.optimize import fsolve

int_mensual = fsolve(f, 0.1)

print("la tasa de interés anual es:" + str(int_mensual * 12 * 100))
la tasa de interés anual es:[6.66093828]

Si se quiere resolver el problema de forma gráfica (pienso que es una solución suficiente)