Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Decoratori
Ottimizzazione dei Decoratori
Obiettivo
Raccogli gli ingredienti e prepara diversi tipi di pizza utilizzando i decoratori.
Ora che i forni sono stati configurati, è il momento di preparare alcune pizze per poterle cuocere in seguito. Ora che sappiamo come usare i decoratori possiamo lavorare per ottimizzarli un po'. Utilizzando il simbolo @ nel codice, seguito dal nome del decoratore, e posizionando questo codice sopra la funzione decorata, possiamo collegare automaticamente un decoratore senza utilizzare una variabile. Per esempio:
# 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()
È importante notare che questa tecnica semplifica il processo avendo una funzione già decorata prima dell'uso, tuttavia a volte potresti comunque desiderare di assegnare un decoratore a una variabile per una maggiore flessibilità.
Per iniziare, vai verso il segno X dorato e prendi gli ingredienti per fare la pizza. Gli ingredienti per preparare la pizza sono: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" e "pineapple". La maggior parte di questi ingredienti si trova all'interno di una matrice che rappresenta gli scaffali della dispensa; utilizza le List Comprehensions per memorizzare tutti gli elementi che desideri prendere in una lista.
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]
Nel codice sopra, la lista ingredients cicla attraverso le righe della matrice chiamata shelves e rimuove tutti gli elementi denominati "jar". Questa List Comprehension ci fa risparmiare tempo evitando di dover aggiungere manualmente tutto. Utilizza la funzione speak() con la lista degli ingredienti per verificare gli elementi che intendi utilizzare.
Una volta raccolti tutti gli ingredienti, ad eccezione di "pineapple", le funzioni per preparare le pizze necessitano di funzioni place() aggiunte per completare la loro utilità. Queste funzioni sono predisposte nell'editor di codice e sono chiamate: peperoni_pizza() che richiede: "peperoni", vegetable_pizza() che richiede: "olive", "pepper", "onion", e pineapple_pizza() che richiede: "ham" e "pineapple".
Dirigiti verso i segni X scuri e utilizza le funzioni decorate per preparare le pizze. Sugli X segnati con tappeti rossi, crea peperoni_pizza(), su tappeti verdi crea vegetable_pizza() e su tappeti gialli crea pineapple_pizza(). Lungo il percorso verso il tappeto giallo, fermati presso il segno X chiaro, rivolgi il viso verso l'armadietto e utilizza la funzione collect() per prendere il "pineapple". Prepara tutte le pizze per completare con successo il livello.