Menu
Coddy logo textTech

שרשור דקורטורים

שיעור 7 מתוך 12 בקורס דקורטורים ב-Python של Coddy.

אפשר לשרשר כמה מעטרים יחד כדי לשנות את ההתנהגות של פונקציה. כדי לשרשר מעטרים, פשוט מחילים אותם בזה אחר זה, כשהמעטר הפנימי ביותר קרוב ביותר לפונקציה שאותה מעטרים.

הנה דוגמה:

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())

הפלט הסופי הוא:

<b><i>Hello, world!</i></b>

שימו לב שבדוגמה שלמעלה המעטר מחזיר את הערך מהפונקציה; עד עכשיו ראינו רק מעטרים שמבצעים את הפונקציה בלי להחזיר את התוצאה שלה!

challenge icon

אתגר

בינוני

כתבו פונקציה בשם my_decorator שמקבלת ארגומנט שלם n ומחזירה פונקציית דקורטור שעוטפת פונקציה נתונה func ב־n שכבות של תגיות HTML. התגית החיצונית ביותר צריכה להיות <div>, השכבה הבאה צריכה להיות <p>, וכן הלאה, כאשר כל שכבה עוקבת מתחלפת בין תגיות <div> ו־<p>. השכבה הפנימית ביותר צריכה לעטוף את פלט הפונקציה בתגיות <b>.

הקוד שיינתן לכם יופעל עם my_decorator; אל תשנו אותו!

 

דוגמה:

@my_decorator(3)
def my_function(s):
	return s.upper()

result = my_function("hello world")
print(result)

פלט:

<div>
<p>
<div>
<b>
HELLO WORLD
</b>
</div>
</p>
</div>

השתמשו בשורות חדשות (\n) כדי לעצב את הפלט כראוי!

נסו בעצמכם

# כתבו את הקוד כאן


# אל תשנו את מה שמתחת לשורה זו
n = int(input())

@my_decorator(n)
def my_function(s):
    return s.upper()

result = my_function(input())
print(result)

כל השיעורים ביחידה דקורטורים ב-Python

תרגלו בעצמכם: קומפיילר Python אונליין