след код:
from functools import wraps
def makebold(original_funct): # decorator
@wraps(original_funct) # optional, only require to keep track of the original function name thru wrapping
def wrapped_4_bold(*args, **kwargs):
print("Bold wrapped function name: {} received arguments: args = {} and kwargs = {}".format(original_funct.__name__, *args,
**kwargs))
result = original_funct(*args, **kwargs)
print("Bold wrapped function completed")
return "<b>" + result + "</b>"
return wrapped_4_bold
def makeitalic(original_funct): # decorator
@wraps(original_funct) # optional, only require to keep track of the original function name thru wrapping
def wrapped_4_italic(*args, **kwargs):
print("Italic wrapped function name: {} received arguments:: args = {} and kwargs = {}".format(original_funct.__name__, *args,
**kwargs))
result = original_funct(*args, **kwargs)
print("Italic wrapped function completed")
return "<i>" + result + "</i>"
return wrapped_4_italic
@makebold #executed second
@makeitalic # executed first
def hello_function(stext, small_letters=True):
if small_letters:
return stext.lower()
else:
return stext.upper()
print(hello_function("давайте попробуем", False))
выводит в консоль:
Bold wrapped function name: hello_function received arguments: args = давайте попробуем and kwargs = False
Italic wrapped function name: hello_function received arguments:: args = давайте попробуем and kwargs = False
Italic wrapped function completed
Bold wrapped function completed
ДАВАЙТЕ ПОПРОБУЕМ
Вопрос почему начинает принтовать в таком порядке - словно Bold wrapper начался первым, потом его перехватил Italic и закончил опять Bold...