Edistynyt Python-kehityskurssi
Luku
>
Taso
Dekoraattorit
Dekoraattoreiden optimointi
Tavoite
Kerää ainekset ja valmistele erilaisia pizzatyyppejä käyttämällä dekorattoreita.
Kun uunit on asetettu, on aika valmistaa pizzoja, jotta voimme myöhemmin paistaa niitä. Nyt kun tiedämme, miten käytetään dekorattoreita, voimme optimoida niitä hieman. Käyttämällä koodissa @-symbolia, jota seuraa dekoratorin nimi, ja sijoittamalla tämän koodin koristellun funktion yläpuolelle, voimme automaattisesti liittää dekoratorin ilman muuttujan käyttöä. Esimerkiksi:
# 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()
On syytä huomata, että tämä tekniikka yksinkertaistaa prosessia, koska funktio on valmiiksi koristeltu ennen käyttöä; kuitenkin joskus saatat haluta määrittää dekoratorin muuttujaan suuremman joustavuuden vuoksi.
Aloita kävelemällä kultaisen X-merkin luo ja nappaa pizzan ainekset. Pizzan valmistukseen tarvittavat ainekset ovat: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" ja "pineapple". Suurin osa näistä aineksista on matriisissa, joka edustaa ruokakomerosi hyllyjä; käytä List Comprehensions -tekniikkaa tallentaaksesi kaikki haluamasi esineet listaan.
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]
Yllä olevassa koodissa lista ingredients käy läpi shelves-nimisen matriisin rivit ja poistaa kaikki kohteet, joiden nimi on "jar". Tämä List Comprehensions -tekniikka säästää aikaa, koska kaikkea ei tarvitse lisätä manuaalisesti yhteen. Käytä funktiota speak() yhdessä ainesosaluettelon kanssa varmistaaksesi, että käytät oikeita esineitä.
Kun kaikki ainekset on kerätty lukuun ottamatta "pineapple", pizzan tekemiseen tarvittaviin funktioihin on lisättävä place()-funktiot niiden toimivuuden täydentämiseksi. Nämä funktiot on asetettu koodieditorissa, ja niiden nimet ovat: peperoni_pizza() (joka vaatii: "peperoni"), vegetable_pizza() (joka vaatii: "olive", "pepper", "onion") ja pineapple_pizza() (joka vaatii: "ham" ja "pineapple").
Kävele tummille X-merkeille ja käytä koristeltuja funktioita pizzojen valmistamiseen. Punaisilla matoilla varustetuilla X-merkeillä luo peperoni_pizza(), vihreillä matoilla luo vegetable_pizza() ja keltaisilla matoilla luo pineapple_pizza(). Matkallasi kohti keltaista mattoa, pysähdy vaalean X-merkin luo, käänny kaapin puoleen ja käytä collect()-funktiota nappamaan "pineapple". Valmista kaikki pizzat, jotta suoritat tason onnistuneesti.