Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Dekoratører
Optimalisere dekoratører
Mål
Samle ingredienser og forbered ulike typer pizza med bruk av dekoratører.
Nå som ovnene er satt opp, er det på tide å forberede noen pizzaer slik at vi kan steke dem senere. Nå som vi vet hvordan man bruker dekoratører, kan vi jobbe for å optimalisere dem litt. Ved å bruke @-symbolet i koden etterfulgt av navnet på dekoratøren og plassere denne koden over den dekorerte funksjonen, kan vi automatisk legge til en dekoratør uten å bruke en variabel. For eksempel:
# 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()
Det er verdt å merke seg at denne teknikken forenkler prosessen ved at en funksjon blir forhåndsdekorert før bruk, men noen ganger ønsker du kanskje fortsatt å tildele en dekoratør til en variabel for større fleksibilitet.
For å starte, gå til gull X-merket og hent ingrediensene for å lage pizza. Ingrediensene for å lage pizzaen er: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" og "pineapple". De fleste av disse ingrediensene befinner seg inne i en matrise som representerer oppbevaringshyllene; bruk List Comprehensions for å lagre alle elementene du ønsker å hente i en 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]
I koden ovenfor går listen ingredients gjennom radene i matrisen kalt shelves og fjerner alle elementer som er "jar". Denne List Comprehension sparer oss for tid ved å slippe å legge til alt manuelt. Bruk funksjonen speak() med ingredienslisten for å verifisere elementene du skal bruke.
Når alle ingredienser er samlet, bortsett fra "pineapple", må funksjonene for å lage pizzaer få lagt til place()-funksjoner for å fullføre funksjonaliteten. Disse funksjonene er satt opp i kodeeditoren og heter: peperoni_pizza() som krever: "peperoni", vegetable_pizza() som krever: "olive", "pepper", "onion", og pineapple_pizza() som krever: "ham" og "pineapple".
Gå til de mørke X-markene og bruk de dekorerte funksjonene for å forberede pizzaene. På X-merker med røde tepper, opprett peperoni_pizza(), på grønne tepper, opprett vegetable_pizza(), og på gule tepper, opprett pineapple_pizza(). På vei til det gule teppet, stopp ved det lyse X-merket, vend deg mot skapet og bruk collect()-funksjonen for å hente "pineapple". Forbered alle pizzaene for å fullføre nivået med suksess.