Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
Dekoratörler
Dekoratörleri Optimize Etme
Amaç
Dekoratörleri kullanarak malzemeleri toplayın ve farklı türde pizzalar hazırlayın.
Fırınlar kurulduğuna göre, daha sonra pişirebilmemiz için biraz pizza hazırlama zamanı geldi. Artık dekoratörleri nasıl kullanacağımızı bildiğimize göre, onları biraz optimize etmek için çalışabiliriz. Kodda dekoratörün adını takip eden @ sembolünü kullanarak, bu kodu süslenmiş fonksiyonun üstüne yerleştirirsek, bir değişken kullanmadan otomatik olarak bir dekoratör ekleyebiliriz. Örneğin:
# Decorator
def create_pizza(func):
def set():
pizza = ["dough","red sauce","cheese"]
player.combine(pizza)
func()
return set
# @ ile süslenmiş fonksiyon
@create_pizza
def peperoni_pizza():
player.place("Peperoni")
player.speak("Peperoni Pizza has been prepped")
# Önceden süslenmiş fonksiyonun kullanımı
peperoni_pizza()
Bu tekniğin, kullanımdan önce bir fonksiyonun önceden süslenmiş olmasını sağlayarak süreci basitleştirdiğini belirtmekte fayda var. Ancak bazen, daha fazla esneklik için bir dekoratörü bir değişkene atamak isteyebilirsiniz.
Başlamak için, altın X işaretine doğru yürüyün ve pizzayı yapmak için malzemeleri alın. Pizza yapmak için gereken malzemeler: "cheese", "dough", "red sauce", "peperoni", "ham","olive", "pepper", "onion" ve "pineapple" . Bu malzemelerin çoğu, kiler raflarını temsil eden bir Matrisin içindedir, almak istediğiniz tüm öğeleri bir listede depolamak için Liste Anlamalarını (List Comprehensions) kullanın.
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]
Yukarıdaki koddaki ingredients listesi, shelves adlı Matrisin satırlarında dolaşır ve Matris içindeki tüm "jar" öğelerini kaldırır. Bu Liste Anlaması, her şeyi manuel olarak eklemekten tasarruf etmemizi sağlar. Kullanacağınız öğeleri doğrulamak için speak() fonksiyonunu malzeme listesi ile kullanın.
Tüm malzemeler toplandıktan sonra, sadece "pineapple" hariç, pizzaları yapmak için fonksiyonların işlevselliğini tamamlamak üzere place() fonksiyonlarının eklenmesi gerekmektedir. Bu fonksiyonlar kod editöründe ayarlanmıştır ve adları: peperoni_pizza() (gereksinim: "peperoni"), vegetable_pizza() (gereksinim: "olive", "pepper", "onion") ve pineapple_pizza() (gereksinim: "ham" ve "pineapple").
Koyu X işaretlerine doğru yürüyün ve süslenmiş fonksiyonları kullanarak pizzaları hazırlayın. Kırmızı halının üzerindeki X işaretlerinde peperoni_pizza() , yeşil halının üzerindeki X işaretlerinde vegetable_pizza() ve sarı halının üzerindeki X işaretlerinde pineapple_pizza() oluşturun. Sarı halıya giderken, açık X işareti önünde durun, dolaba doğru bakın ve collect() fonksiyonunu kullanarak "pineapple" alın. Seviyeyi başarıyla tamamlamak için tüm pizzaları hazırlayın.