Coding for KidsCoding for Kids
Творческие УровниИспытанияРуководство для Учителей
Голосовать за функции
Продвинутый курс разработки на 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". Подготовьте все пиццы, чтобы успешно пройти уровень.

Книга Кода