HTML Generator
คุณกำลังเขียนสคริปต์ที่สร้าง HTML สำหรับหน้าเว็บแบบ on the fly โดยตอนนี้มี decorator สองตัวที่เพิ่มแท็ก bold หรือ italics ให้กับฟังก์ชันที่คืนค่าเป็น string แต่ decorator ทั้งสองนี้มีโครงสร้างที่คล้ายกันมาก แทนที่จะเขียน decorator ลักษณะเดิมซ้ำๆ หลายตัว คุณต้องการสร้าง decorator ตัวเดียวชื่อ html() ที่รับคู่ของแท็กเปิดและแท็กปิดใดก็ได้
def bold(func):
@wraps(func)
def wrapper(*args, **kwargs):
msg = func(*args, **kwargs)
return '<b>{}</b>'.format(msg)
return wrapper
def italics(func):
@wraps(func)
def wrapper(*args, **kwargs):
msg = func(*args, **kwargs)
return '<i>{}</i>'.format(msg)
return wrapper
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนฟังก์ชันใน Python
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
def html(open_tag, close_tag):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
msg = func(*args, **kwargs)
return '{}{}{}'.format(open_tag, msg, close_tag)
# Return the decorated function
return ____
# Return the decorator
return ____