41 - Aplicaciones propias con varios módulos

A medida que una aplicación sea más grande vimos que disponer todo el algoritmo en forma secuencial es difícil de mantener y desarrollar. Para eso vimos que podemos resolver por partes utilizando funciones.

Pero siempre dispusimos todas las funciones en un único archivo.

Pensemos que nuestro problema podría ser lo suficientemente complejo y grande que también por más que lo dividamos en funciones un único archivo sea complejo de mantener.

En Python podemos agrupar funciones en distintos archivos (módulos) y luego importarlos en otros módulos.

Así como importamos los módulos de la biblioteca estándar de Python podemos importar otros módulos que codifiquemos nosotros.

Problema 1:

Confeccionar una aplicación que permita cargar por teclado una lista de enteros, obtener y mostrar el mayor y calcular su suma. Definir un módulo con las funciones de carga, identificar el mayor y sumar. En el módulo principal del programa importar el otro módulo y llamar a sus funciones.

Para ser un poco más ordenados crearemos una carpeta llamada proyecto1 y dentro de la misma crearemos los dos módulos llamados:

operacioneslista.py
principal.py

El módulo operacioneslista.py contiene todas las funciones que nos permiten cargar una lista, imprimir el mayor de una lista y sumar todos los elementos y mostrar dicho valor.

módulo: operacioneslista.py

Ver video

def cargar():
    lista=[]
    for x in range(5):
        valor=int(input("Ingrese valor:"))
        lista.append(valor)
    return lista


def imprimir_mayor(lista):
    may=lista[0]
    for x in range(1,5):
        if lista[x]>may:
            may=lista[x]
    print("Mayor de la lista",may)


def imprimir_suma(lista):
    suma=0
    for elemento in lista:
        suma=suma+elemento
    print("Suma de todos sus elementos",suma)

El segundo archivo y desde donde realmente arrancará nuestro programa es el módulo principal.py

módulo: principal.py

import operacioneslista

lista=operacioneslista.cargar()
operacioneslista.imprimir_mayor(lista)
operacioneslista.imprimir_suma(lista)

Es importante indicar que cuando queremos ejecutar nuestro programa tenemos que abrir el archivo principal.py y elegir la opción "Run Module" o presionar la tecla "F5".

ejecucion de modulos propios

Como podemos ver nuestro módulo principal solo tiene cuatro líneas:

import operacioneslista

lista=operacioneslista.cargar()
operacioneslista.imprimir_mayor(lista)
operacioneslista.imprimir_suma(lista)

Primero importamos el módulo operacioneslista y seguidamente llamamos a las funciones de cargar, imprimir_mayor y imprimir_suma. Recordar que debemos anteceder el nombre del módulo donde están definidas.

Podemos ver luego de ejecutarlo a nuestro programa que en la carpeta de nuestro proyecto1 además de los archivo operacioneslista.py y principal.py hay una carpeta llamada __pycache__ con un archivo con extensión *.pyc (operacioneslista.cpython-35.pyc) Este archivo lo crea automáticamente el Python cuando ejecutamos por primera vez nuestro programa y tiene por objetivo hacer más eficiente las ejecuciones futuras del programa.

Por ahora dispondremos todos los módulos de nuestro proyecto en la misma carpeta.

ejecucion de modulos propios

Esta característica de Python de poder disponer funcionalidades en distintos archivos es fundamental para cuando hay que desarrollar programas en los cuales intervienen un conjunto de programadores. Se posibilita asignar a cada programador distintas funcionalidades y que se implementen en distintos módulos.

También nos facilita el implementar módulos con funcionalidades que pueden ser reutilizadas en otros proyectos, así como sucede con la biblioteca estándar de Python.

Problema 2:

Confeccionar un módulo que implemente dos funciones, una que retorne el mayor de dos enteros y otra que retorne el menor de dos enteros.

En el módulo principal importar solo la función que retorne el mayor, luego cargar dos enteros y mostrar el mayor de ellos

Crear una carpeta llamada proyecto2 y dentro de la misma crear dos módulos llamados:

mayormenor.py
principal.py

El módulo mayormenor.py contiene las dos funciones que identifican el mayor de dos enteros por un lado y el menor de dos enteros.

módulo: mayormenor.py

Ver video

def mayor(x1,x2):
    if x1>x2:
        return x1
    else:
        return x2


def menor(x1,x2):
    if x1<x2:
        return x1
    else:
        return x2

Por otro lado el programa principal que importa solo la función mayor es:

módulo: principal.py

from mayormenor import mayor

valor1=int(input("Ingrese primer valor:"))
valor2=int(input("Ingrese segundo valor:"))
print("El mayor de los dos valores es",mayor(valor1,valor2))   

Esta sintaxis de importar funcionalidades particulares de un módulo la vimos anteriormente con la biblioteca estándar de Python.