Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye
Dekoratörler
Zincirleme Dekoratörler
Amaç
Dekoratörleri zincirleyerek çatıyı renkli bayraklarla süsleyin.
Çatıda, uzun süre o mutfakta kapalı kaldıktan sonra biraz temiz hava var, bazı sıralarda bayraklar yok. Buradayken onları yerleştirmek iyi bir fikir olabilir, ancak bir sırayı kurmak için çeşitli bayraklara ihtiyacınız olduğundan bu biraz zor olabilir. Bunu dekoratörleri zincirleyerek başarabilirsiniz.
Dekoratörler, @ işaretlerini iki kez kullanarak zincirlenir; yani, tek bir fonksiyona birden fazla dekoratör eklenir. Örneğin, bu, bir fonksiyonu iki dekoratör fonksiyonu arasına yerleştirebilmenizi sağlar:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
Yukarıdaki kod, zincirlenmiş dekoratörlerin eklendiği bir fonksiyonu göstermektedir; bu dekoratörler, fonksiyona öyle bir işlenir ki sıranın kenarlarına mavi bayraklar, iç katmana kırmızı bayraklar ve en sonunda ortada yeşil bir bayrak eklenir. Hepsi line adlı bir listeye eklenir; bu, sıralara bayrak yerleştirmek için kullanılacak yöntemdir.
Altın X işaretine doğru yürüyerek read() fonksiyonunu kullanın ve tabelada listelenen talimatları kontrol edin. Burada, hangi bayrağın nereye konulacağını size bildirecek; üç (3) farklı renkli bayrak türü bulunmaktadır: "red", "green" ve "blue". Her sırada üç bayrak olacak; sıranın ortasında bir (1), iç sırada iki (2) ve dış sırada iki (2) olmak üzere toplamda beş (5) bayrak, tıpkı haritanın sol altındaki önceden yapılmış sıradaki gibi.
Açık X işaretine doğru yürüyün ve sandıktaki "flags"'ı toplamak için collect() fonksiyonunu kullanın. Bunu, sol baştan sağa doğru, daha önce okuduğunuz talimatlarda tarif edildiği sırayla bayrakları yerleştirmeye başlayarak, koyu X işaretlerine yürüyerek takip edin. Bunu başarmak için orta fonksiyonları kullanın; örneğin: middle_green() şu şekilde bir bayrak sırası oluşturur: ["blue", "red", "green" ,"red","blue" ]. Ardından, line listesini kullanarak sırayı kurmak için place() fonksiyonunu kullanın, şu şekilde: place(line).
Her X işaretinden sonra line listesini clear() fonksiyonunu kullanarak temizleyin, şu şekilde: line.clear(), bu, her sıra için yeni bir liste oluşturmanıza gerek kalmadan listeyi yeniden kullanmanızı sağlar. Sağdaki son X işareti özel bir fonksiyon gerektirir:
@
@
def middle_custom():
line.append( Insert append )
player.speak("%s flag has been added to the line"
% ( insert flag ))
Fonksiyona dekoratör eklemek için iki @ sembolünü kullanın, ardından satır ekleme kısmını ve bayrağın rengini string içindeki talimatlara uygun şekilde doldurun. Seviyeyi tamamlamak için tabeladaki talimatlara uygun şekilde bunu yapın.