Cours avancé de développement Python
Chapitre
>
Niveau
Décorateurs
Optimiser les décorateurs
Objectif
Récupérez les ingrédients et préparez différents types de pizzas en utilisant des décorateurs.
Maintenant que les fours sont installés, il est temps de préparer quelques pizzas pour pouvoir les cuire plus tard. Maintenant que nous savons utiliser les décorateurs, nous pouvons travailler à les optimiser un peu. En utilisant le symbole @ dans le code suivi du nom du décorateur et en plaçant ce code au-dessus de la fonction décorée, nous pouvons automatiquement attacher un décorateur sans utiliser de variable. Par exemple:
# Decorator
def create_pizza(func):
def set():
pizza = ["dough","red sauce","cheese"]
player.combine(pizza)
func()
return set
# Function being decorated with @
@create_pizza
def peperoni_pizza():
player.place("Peperoni")
player.speak("Peperoni Pizza has been prepped")
# Using pre-decorated function
peperoni_pizza()
Il est intéressant de noter que cette technique simplifie le processus en pré-décorant une fonction avant son utilisation, toutefois, il se peut que vous souhaitiez toujours assigner un décorateur à une variable pour plus de flexibilité.
Pour commencer, rendez-vous vers la croix X dorée et récupérez les ingrédients pour faire de la pizza. Les ingrédients pour préparer la pizza sont : "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" et "pineapple". La plupart de ces ingrédients se trouvent dans une matrice représentant les étagères du garde-manger. Utilisez des compréhensions de liste pour stocker tous les éléments que vous souhaitez prendre dans une liste.
shelves = [ ["cheese", "dough", "jar"], ["jar", "red sauce", "jar"], ["peperoni", "jar" , "ham"], ["olive", "pepper", "onions"] ] ingredients = [ item for row in shelves for item in row if not "jar" in item]
Dans le code ci-dessus, la liste ingredients parcourt les lignes de la matrice nommée shelves et supprime tous les éléments nommés "jar". Cette compréhension de liste nous fait gagner du temps en évitant d'ajouter manuellement chaque élément. Utilisez la fonction speak() avec la liste d'ingrédients pour vérifier les éléments que vous allez utiliser.
Une fois tous les ingrédients collectés à l'exception de "pineapple", les fonctions pour faire les pizzas nécessitent l'ajout de fonctions place() afin de compléter leur utilité. Ces fonctions sont définies dans l'éditeur de code et sont nommées : peperoni_pizza() qui requiert : "peperoni", vegetable_pizza() qui requiert : "olive", "pepper", "onion", et pineapple_pizza() qui requiert : "ham" et "pineapple".
Rendez-vous vers les croix X sombres et utilisez les fonctions décorées pour préparer les pizzas. Sur les croix X avec des tapis rouges, créez peperoni_pizza(), sur les tapis verts, créez vegetable_pizza() et sur les tapis jaunes, créez pineapple_pizza(). En vous rendant vers le tapis jaune, arrêtez-vous à la croix X claire, faites face à la vitrine et utilisez la fonction collect() pour récupérer le "pineapple". Préparez toutes les pizzas afin de réussir le niveau.