我正在学习装饰,发现了这个有用的线索,真的帮了我很多。 How to make a chain of function decorators?
根据我的理解,装饰者只是语法上的糖。但是,我在从语法糖代码转换为非语法糖代码时遇到了困难
# Decorators
def addBold(func):
def wrapper(*arg1):
print("Bold Added")
return '<b>' + func(*arg1) + '</b>'
return wrapper
def addItalic(func):
def wrapper(*arg1):
print("Italic Added")
return '<i>' + func(*arg1) + '</i>'
return wrapper
此代码适用于:
@addBold
def getHTMLCode(passedText):
return passedText
newVar = getHTMLCode('Hello')
print(newVar)
# outputs: Bold Added <b>Hello</b>
我尝试转换为非语法的糖类代码,但这不起作用(TypeError: 'str' object is not callable
):
def getHTMLCode(passedText):
return passedText
newVar = addBold(getHTMLCode('Hello')) # returns wrapper
newVar()
在没有装饰语法糖的情况下,工作代码(第二个块)是什么样子的
您需要将要包装的函数传递给decorator函数,然后使用以下参数调用返回的包装器:
请注意
wrapped_getHTMLCode
的工作原理与getHTMLCode
的装饰版本类似。您使用希望加粗的字符串调用它,它返回的字符串周围带有HTML加粗标记相关问题 更多 >
编程相关推荐