Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel
Funciones avanzadas
Funciones Parciales
Objetivo
Empaca y coloca los materiales de construcción que fueron entregados al muelle utilizando funciones parciales.
Algunos suministros fueron entregados recientemente a un muelle, deben ser empacados y almacenados para que puedan utilizarse como materiales de construcción. Los materiales deben estar envueltos en tela y atados con hilo. Es importante pesar todos los artículos cuando los empacas para que puedan ser transportados de manera efectiva posteriormente. Para facilitar esto, podemos optimizar el proceso utilizando Funciones Parciales.
Una Función Parcial es una función personalizada que se acorta al no necesitar agregar valores para argumentos que son mayormente constantes. Esto te permite usar funciones que aceptan múltiples argumentos y ejecutarlas con solo un argumento o con la cantidad que elijas.
from functools import partial
Para comenzar, debes importar partial del módulo conocido como functools, esto te permitirá crear Funciones Parciales. El código de importación siempre se coloca en la parte superior del editor de código.
Configura una función llamada weight y haz que reciba tres (3) argumentos: thread, cloth y material. Esta función te permitirá calcular el peso de los materiales empaquetados; podemos optimizar este proceso aún más canalizándolo a través de una función parcial.
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
Crea una Función Parcial llamada package, que se configura de manera similar a las funciones lambda. Utiliza partial() para configurar la función y añade el nombre de la función, así como valores fijos para los argumentos que deseas asignar.
Cualquier argumento de la función original que no asignes se convertirá en un argumento que deberá ser proporcionado por la Función Parcial. En el caso de la función parcial package(), es el argumento material.
Dirígete hacia las marcas X oscuras frente a las cajas para recoger los materiales de embalaje. En la marca X de la alfombra amarilla, utiliza la función collect() para adquirir "thread" y dirígete hacia la marca X de la alfombra morada y utiliza la función collect() para obtener "cloth". Estos elementos se utilizarán para empacar los materiales.
Cruza el muelle y recoge todos los materiales de construcción, que son: bricks, planks, red_bricks y wood. Una vez que los recojas, suma la cantidad recolectada de cada uno a una variable nombrada según el material, por ejemplo: bricks = 3.
Después, dirígete hacia las marcas X claras frente a las cajas y calcula el peso de cada material de construcción antes de almacenarlo. Utiliza la función speak() en conjunto con la Función Parcial package() para calcular el peso. Utiliza las variables del material como argumentos para la función package(), por ejemplo:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
Continúa utilizando la función place() para almacenar el material dentro de las cajas, hazlo también utilizando la función package(), como en el ejemplo anterior.
En la marca X clara con la alfombra red, pesa y almacena bricks. En la marca X clara con la alfombra blue, pesa y almacena planks. En la marca X clara con la alfombra orange, pesa y almacena red_bricks. En la marca X clara con la alfombra green, pesa y almacena wood. Almacena y pesa los cuatro (4) materiales en las cajas correctas para completar el nivel.