Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel
Decoratori
Optimizarea decoratorilor
Obiectiv
Colectează ingrediente și prepară diferite tipuri de pizza folosind decoratori.
Acum că cuptoarele au fost setate, este timpul să pregătim niște pizza pentru a le găti ulterior. Acum că știm cum să folosim decoratori, putem lucra la optimizarea lor puțin. Folosind simbolul @ în cod, urmat de numele decoratorului și plasând acest cod deasupra funcției decorate, putem atașa automat un decorator fără a folosi o variabilă. De exemplu:
# 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()
Merită remarcat că această tehnică simplifică procesul prin faptul că o funcție este pre-decorată înainte de utilizare, însă uneori s-ar putea să dorești în continuare să atribui un decorator unei variabile pentru o flexibilitate mai mare.
Pentru a începe, mergi la marca X de culoare aurie și ia ingredientele pentru a face pizza. Ingredientele necesare pentru a face pizza sunt: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" și "pineapple". Majoritatea acestor ingrediente se află într-o Matrice care reprezintă rafturile din cămară, folosește List Comprehensions pentru a stoca toate elementele pe care dorești să le iei într-o listă.
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]
În codul de mai sus, lista ingredients parcurge rândurile din Matricea numită shelves și elimină toate elementele denumite "jar". Această List Comprehension ne economisește timpul de a adăuga manual totul împreună. Folosește funcția speak() cu lista de ingrediente pentru a verifica elementele pe care le vei folosi.
Odată ce toate ingredientele au fost colectate, cu excepția "pineapple", funcțiile pentru prepararea pizza trebuie să aibă funcții place() adăugate pentru a-și completa utilitatea. Aceste funcții sunt configurate în editorul de cod și sunt numite: peperoni_pizza() care necesită: "peperoni", vegetable_pizza() care necesită: "olive", "pepper", "onion", și pineapple_pizza() care necesită: "ham" și "pineapple".
Mergi la mărcile X întunecate și folosește funcțiile decorate pentru a pregăti pizza. Pe mărcile X cu covoare roșii creează peperoni_pizza(), pe covoare verzi creează vegetable_pizza() și pe covoare galbene creează pineapple_pizza(). Pe drumul spre covorul galben, oprește-te la marca X deschisă, îndreaptă-te spre dulap și folosește funcția collect() pentru a lua "pineapple". Pregătește toate pizzele pentru a finaliza cu succes nivelul.