چگونه میتوان دکوراتور تابع بسازم در پایتون ساخت؟
mohsen•3 هفته قبل
ارسال شده در
pythonفرض کنید که می خواهیم دو تابع دکوراتور make_bold و make_italic را تعریف کرده و به صورت زیر بر روی تابع say اعمال کنیم.
@make_bold
@make_italic
def say():
return "Hello"
تا با فراخوانی تابع say()
مقدار زیر برگردانده شود:
"<b><i>Hello</i></b>"
ساخت دکوراتورهای make_bold
و make_italic
برای تعریف دکوراتورها می توانیم از پکیج functools به صورت زیر استفاده کنیم:
from functools import wraps
def makebold(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return "<b>" + fn(*args, **kwargs) + "</b>"
return wrapper
def makeitalic(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return "<i>" + fn(*args, **kwargs) + "</i>"
return wrapper
استفاده از دکوراتورها
اکنون میتوانیم این دکوراتورها را به تابع say
اعمال کنیم:
@makebold
@makeitalic
def say():
return "Hello"
در این حالت، زمانی که ما تابع say()
را فراخوانی کنیم، دکوراتور makeitalic
ابتدا فراخوانی میشود و سپس دکوراتور makebold
. به این ترتیب، متن به شکل <i>Hello</i>
تبدیل میشود و در نهایت به b><i>Hello</i></b
تبدیل میشود.
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!