Fuente:ThinkCspy libro interactivo online
5.5. Creando módulos
Has visto cómo usar módulos como , , y , pero ¿cómo crearías un módulo?randommathturtle
¡Cada vez que has escrito un script de Python has creado un módulo!
Un módulo de Python es solo un archivo de código fuente de Python. Consideremos el archivo Python que se muestra a continuación.
cafetería_tienda.py
""" The coffee shop module contains functions and contains variables important to implementing a coffee shop. """ # Set some variables shop_name = "Runestone Brew House" coffee_sizes = ["small", "medium", "large"] coffee_roasts = ["hot chocolate", "light", "medium", "dark", "espresso"]
Este es un script de Python llamadocoffee_shop.py que contiene tres variables:shop_name ,coffee_sizes , ycoffee_roasts . shop_nameEs una cadenacoffee_sizes, es una lista que contiene cadenas ycoffee_roasts también es una lista que contiene cadenas.
Un módulo es otro nombre para:
Actividad: 5.5.1 Elección múltiple (pregunta4_5_1)
¡eso es genial! Tenemos lo básico de una cafetería. Todo lo que necesitas es un poco de café tostado y tazas. Estás listo para comenzar.
Sin embargo, si intentas ejecutar ese código, no hará mucho que sea visible para un usuario…
¿Cómo podemos utilizar elcoffee_shop módulo? Podemos importarlo y usarlo en otros archivos de código fuente de Python. Consideremos el archivo Python que se muestra a continuación.
café_cliente.py
import coffee_shop # Output the information we know from the module print("Welcome to", coffee_shop.shop_name) print("Available sizes:", coffee_shop.coffee_sizes) print("Available roasts:", coffee_shop.coffee_roasts
Este es un script de Python llamadocoffee_customer.py que importa nuestrocoffee_shop módulo y luego imprime la información de ese módulo.
Crea un módulo mediante:
Actividad: 5.5.2 Elección múltiple (pregunta 4_5_2)
Usamos notación de puntos para tomar las variables , , y del módulo. Luego los imprimimos como parte de mensajes agradables.shop_namecoffee_sizescoffee_roastscoffee_shop
Sin embargo, las variables no son lo único que podemos colocar en los módulos… Podemos poner cualquier código Python válido en ellos.
¡Mejoremos nuestra cafetería!
cafetería_tienda.py
"""
The coffee shop module contains functions and contains variables
important to implementing a coffee shop.
"""
# Set some variables
shop_name = "Runestone Brew House"
coffee_sizes = ["small", "medium", "large"]
coffee_roasts = ["hot chocolate", "light", "medium", "dark", "espresso"]
def order_coffee(size, roast):
"""
Take an order from a user
:param size: a string containing one of the coffee_sizes
:param roast: a string containing one of the coffee_roasts
:return: a message about the coffee order
"""
return "Here's your {} coffee roasted {}".format(size, roast)
El contenido del archivo antiguo está presente, pero ahora también hay unaorder_coffee función que toma dos argumentossize yroast .
Además, ¡mira todos los increíbles comentarios que hay allí!
Comentarios de la función
Las funciones son el siguiente capítulo, pero los comentarios utilizados aquí demuestran un estilo de documentación común de Python.
Ok, ahora tenemos una función en nuestro módulo, usémosla.
café_cliente.py
# Import the module with coffee_shop functionality import coffee_shop # Output the information we know from the module print("Welcome to", coffee_shop.shop_name) print("Available sizes:", coffee_shop.coffee_sizes) print("Available roasts:", coffee_shop.coffee_roasts) # Get some inputs from the user order_size = input("What size coffee do you want? ") order_roast = input("What roast do you want? ") # Send the order to the coffee shop module shop_says = coffee_shop.order_coffee(order_size, order_roast) # Print out whatever it gave back to us print(shop_says)
¿Qué determina el nombre de nuestra importación?
Actividad: 5.5.3 Elección múltiple (pregunta4_5_3)
Agregamos algunas líneas a nuestrocoffee_customer script… Ahora, después de imprimir bien los datos,coffee_customer le pide al usuario una talla y un asado. ¡Éstos son los parámetros requeridos por nuestraorder_coffee función en elcoffee_shop módulo!
Llame a laorder_coffee función con notación de puntos, como si recuperara valores de variables. La llamada a la función es la línea que dice . La función devuelve algo, por lo que lo guardamos en . La siguiente línea imprime lo que dijo la tienda.shop_says = coffee_shop.order_coffee(order_size, order_roast)shop_says
¡Las cafeterías hacen más que sólo café! Quizás quieras un poco de leche. Necesitamos agregar alguna funcionalidad a nuestra cafetería. Compruébalo a continuación.
cafetería_tienda.py
Se llama a la nueva funciónadd_milk_please y toma un parámetro: elfat_content . Devuelve una cadena que explica lo que sucedió.
Esto es genial. Pero la función no va a hacer nada por sí sola. Tenemos que llamarlo. Consulte la actualización de nuestrocoffee_customer script a continuación.
café_cliente.py
¡eso se puso elegante! ¡Estábamos pidiendo café pero ahora el usuario puede optar por agregar leche! La selección se realiza en un par de capítulos, pero si lees ese código como en inglés verás lo que está pasando.
La llamadaadd_milk_please ocurre justo ahí, se parece a la otra: .shop_says = coffee_shop.add_milk_please(milk_fat)
Terminemos esta visita a la cafetería. Pero será mejor que dejes una propina. Agregaremos otra función a nuestra cafetería para habilitarla.
cafetería_tienda.py
""" The coffee shop module contains functions and contains variables important to implementing a coffee shop. """ # Set some variables shop_name = "Runestone Brew House" coffee_sizes = ["small", "medium", "large"] coffee_roasts = ["hot chocolate", "light", "medium", "dark", "espresso"] def order_coffee(size, roast): """ Take an order from a user :param size: a string containing one of the coffee_sizes :param roast: a string containing one of the coffee_roasts :return: a message about the coffee order """ return "Here's your {} coffee roasted {}".format(size, roast) def add_milk_please(fat_content): """ Pretend like we're adding some milk to a coffee :param fat_content: a string or integer containing the milkfat content :return: a message about having added the milk """ return "I've added the {}% milk".format(fat_content) def give_tip(tip_amount): """ Take a tip from the user, then be happy about it :param tip_amount: the tip amount :return: nothing """ print("Thank you so much! We don't make a ton of money.") # Not having a "return" statement causes our function to return None
Agregamos lagive_tip función que toma un parámetro, eltip_amount . En realidad no hacemos nada con ese parámetro… Pero si nos volviéramos más elegantes con la cafetería, podríamos agregarlo a la factura del cliente, podríamos imprimirlo o podríamos reprender al cliente por ser demasiado tacaño… ¡Aquí simplemente seguimos adelante y expresamos un agradecimiento al usuario! Ser’ amigable es importante.
¿Cómo llamamos a esto desde nuestrocoffee_customer script?
café_cliente.py
# Import the module with coffee_shop functionality import coffee_shop # Output the information we know from the module print("Welcome to", coffee_shop.shop_name) print("Available sizes:", coffee_shop.coffee_sizes) print("Available roasts:", coffee_shop.coffee_roasts) # Get some inputs from the user order_size = input("What size coffee do you want? ") order_roast = input("What roast do you want? ") # Send the order to the coffee shop module shop_says = coffee_shop.order_coffee(order_size, order_roast) # Print out whatever it gave back to us print(shop_says) # See if the user wants to add milk add_milk_response = input("Do you want to add milk (y/n)? ") # Convert the response to lowercase, then check for a "yes" answer if "y" in add_milk_response.lower(): milk_fat = input("What percent milk do you want added? ") shop_says = coffee_shop.add_milk_please(milk_fat) # Print out whatever it gave back to us print(shop_says) # They better give a tip... print("THAT'S GOOD COFFEE! Very good. Your brain is working again.") print("You better give a tip.") tip_amount = input("Tip amount? ") coffee_shop.give_tip(tip_amount)
Nuestra llamada de función está en la última línea.




Comentarios del módulo
Es importante incluir comentarios de encabezado en su módulo que expliquen lo que hace el módulo.