Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Декоратори
Оптимизиране на декоратори
Цел
Събирайте съставки и приготвяйте различни видове пици, използвайки декоратори.
Сега, когато фурните са настроени, е време да приготвим няколко пици, за да можем по-късно да ги изпечем. Сега, когато знаем как да използваме декоратори, можем да ги оптимизираме малко. Като използвате символа @ в кода, последван от името на декоратора, и поставите този код над декорираната функция, ние можем автоматично да прикачим декоратор, без да използваме променлива. Например:
# 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()
Заслужава да се отбележи, че тази техника опростява процеса, като пред-декорира функцията преди употреба, но понякога може да пожелаете да присвоите декоратор на променлива за по-голяма гъвкавост.
За да започнете, отидете до златния X и вземете съставките за приготвяне на пица. Съставките за направата на пица са: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" и "pineapple". Повечето от тези съставки се намират в Матрица, представляваща рафтовете в килера, използвайте List Comprehensions, за да съхраните всички елементи, които искате да вземете, в списък.
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]
В горния код списъкът ingredients преминава през редовете на Матрицата, наречена shelves, и премахва всички елементи в Матрицата, равни на "jar". Този List Comprehension ни спестява време, като не налага да добавяме всичко ръчно. Използвайте функцията speak() със списъка от съставки, за да проверите елементите, които ще използвате.
След като бъдат събрани всички съставки с изключение на "pineapple", функциите за приготвяне на пици се нуждаят от добавени функции place(), за да завършат своята функционалност. Тези функции са настроени в редактора на кода и се казват: peperoni_pizza(), която изисква: "peperoni", vegetable_pizza(), която изисква: "olive", "pepper", "onion", и pineapple_pizza(), която изисква: "ham" и "pineapple".
Отидете до тъмните X и използвайте декорираните функции, за да приготвите пиците. На X с червени килими създайте peperoni_pizza(), на зелени килими създайте vegetable_pizza() и на жълти килими създайте pineapple_pizza(). По пътя към жълтия килим, спирайте до светлия X, обърнете се към шкафа и използвайте функцията collect(), за да вземете "pineapple". Пригответе всички пици, за да завършите нивото успешно.