Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau
Decoratoren
Decorator optimaliseren
Doelstelling
Verzamel ingrediënten en bereid verschillende soorten pizza’s door decorators te gebruiken.
Nu de ovens zijn ingericht, is het tijd om wat pizza’s te bereiden zodat we ze later kunnen bakken. Nu we weten hoe we decorators moeten gebruiken, kunnen we ze wat optimaliseren. Door in de code het teken @ te gebruiken, gevolgd door de naam van de decorator, en deze code boven de gedecoreerde functie te plaatsen, kunnen we automatisch een decorator toevoegen zonder een variabele te gebruiken. Bijvoorbeeld:
# 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()
Het is belangrijk op te merken dat deze techniek het proces vereenvoudigt door een functie vooraf te decoreren, maar soms wil je toch een decorator aan een variabele toewijzen voor meer flexibiliteit.
Om te beginnen, loop naar het gouden X-teken en pak de ingrediënten om pizza te maken. De ingrediënten voor het maken van de pizza zijn: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" en "pineapple". De meeste van deze ingrediënten bevinden zich in een matrix die de voorraadkastplanken voorstelt, gebruik List Comprehensions om alle items die je wilt pakken in een lijst op te slaan.
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]
In de bovenstaande code doorloopt de lijst ingredients de rijen van de matrix genaamd shelves en verwijdert alle items die "jar" heten. Deze List Comprehension bespaart ons de tijd om alles handmatig samen te voegen. Gebruik de speak() functie met de ingrediëntenlijst om te verifiëren welke items je gaat gebruiken.
Zodra alle ingrediënten zijn verzameld, behalve de "pineapple", moeten de functies om de pizza’s te maken, place() functies toegevoegd krijgen om hun functionaliteit te voltooien. Deze functies zijn ingesteld in de code-editor en heten: peperoni_pizza() die nodig heeft: "peperoni", vegetable_pizza() die nodig heeft: "olive", "pepper", "onion", en pineapple_pizza() die nodig heeft: "ham" en "pineapple".
Loop naar de donkere X-tekens en gebruik de gedecoreerde functies om de pizza’s voor te bereiden. Op X-tekens met rode tapijten maak je peperoni_pizza(), op groene tapijten maak je vegetable_pizza() en op gele tapijten maak je pineapple_pizza(). Onderweg naar het gele tapijt, stop bij het lichte X-teken, richt je op de kast en gebruik de collect() functie om de "pineapple" te pakken. Bereid alle pizza’s voor om het level succesvol te voltooien.