Chaining Decorators
Coddy'nin Python Dekoratörleri kursunda ders 7 / 12.
Bir fonksiyonun davranışını değiştirmek için birden fazla dekoratörü birbirine zincirlemek mümkündür. Dekoratörleri zincirlemek için, en içteki dekoratör dekore edilen fonksiyona en yakın olacak şekilde, onları birbiri ardına uygulamanız yeterlidir.
İşte bir örnek:
def make_bold(func):
def wrapper():
return "<b>" + func() + "</b>"
return wrapper
def make_italic(func):
def wrapper():
return "<i>" + func() + "</i>"
return wrapper
@make_bold
@make_italic
def hello():
return "Hello, world!"
print(hello())Nihai çıktı şöyledir:
<b><i>Hello, world!</i></b>Yukarıdaki örnekte dekoratörün fonksiyondan değeri döndürdüğüne dikkat edin; şimdiye kadar sadece fonksiyonu sonucunu döndürmeden çalıştıran dekoratörler görmüştük!
Görev
OrtaBir tam sayı argümanı n alan ve verilen bir func fonksiyonunu n katmanlı HTML etiketleriyle sarmalayan bir dekoratör fonksiyonu döndüren my_decorator adında bir fonksiyon yazın. En dıştaki etiket <div> olmalı, bir sonraki katman <p> olmalı ve bu şekilde devam ederek her bir sonraki katman <div> ve <p> etiketleri arasında dönüşümlü olarak değişmelidir. En içteki katman, fonksiyonun çıktısını <b> etiketleri içine sarmalamalıdır.
my_decorator ile çalıştırılacak kod size verilmiştir, onu değiştirmeyin!
Örnek:
@my_decorator(3)
def my_function(s):
return s.upper()
result = my_function("hello world")
print(result)Çıktı:
<div>
<p>
<div>
<b>
HELLO WORLD
</b>
</div>
</p>
</div>Çıktıyı doğru şekilde biçimlendirmek için yeni satır karakterlerini (
\n) kullanın!
Kendin dene
# Kodu buraya yazın
# Bu satırın altını değiştirmeyin
n = int(input())
@my_decorator(n)
def my_function(s):
return s.upper()
result = my_function(input())
print(result)Python Dekoratörleri bölümündeki tüm dersler
Kendi başına pratik yap: Online Python derleyicisi