Merangkai Dekorator
Pelajaran 7 dari 12 dalam kursus Dekorator Python di Coddy.
Kamu bisa merangkai beberapa decorator untuk mengubah perilaku suatu fungsi. Untuk merangkai decorator, kamu cukup menerapkannya satu per satu, dengan decorator terdalam berada paling dekat dengan fungsi yang dihias.
Berikut contohnya:
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())Output akhirnya adalah:
<b><i>Hello, world!</i></b>Perhatikan bahwa pada contoh di atas, decorator mengembalikan nilai dari fungsi. Sebelumnya, kita hanya melihat decorator yang menjalankan fungsi tanpa mengembalikan hasilnya!
Tantangan
SedangTulis sebuah fungsi bernama my_decorator yang menerima argumen bilangan bulat n dan mengembalikan fungsi dekorator yang membungkus fungsi yang diberikan func dalam n lapisan tag HTML. Tag terluar harus berupa <div>, lapisan berikutnya harus berupa <p>, dan seterusnya, dengan setiap lapisan berikutnya bergantian antara tag <div> dan <p>. Lapisan terdalam harus membungkus output fungsi dengan tag <b>.
Kamu diberi kode yang akan dijalankan dengan my_decorator, jangan ubah kode tersebut!
Contoh:
@my_decorator(3)
def my_function(s):
return s.upper()
result = my_function("hello world")
print(result)Output:
<div>
<p>
<div>
<b>
HELLO WORLD
</b>
</div>
</p>
</div>Gunakan baris baru (
\n) untuk memformat output dengan benar!
Coba sendiri
# Tulis kodemu di sini
# Jangan ubah kode di bawah baris ini
n = int(input())
@my_decorator(n)
def my_function(s):
return s.upper()
result = my_function(input())
print(result)Semua pelajaran di Dekorator Python
Latihan sendiri: Compiler Python online