装饰器函数未执行
decorator function is not executing
我正在尝试按如下方式打印图案:
******
20
******
我使用了装饰函数来打印主函数前后的图案。
但是我的代码没有打印模式,只有主要功能正在执行。
请建议我如何以更好的格式编写函数。
以下是我的代码:
def banner(str1, len1):
def decorator(func):
def wrapper(*args1):
new_line = '\n'
str2 = str1 * len1
return f'{str2}{new_line}{func(*args1)}{new_line}{str2}'
return wrapper
return decorator
@banner('*', 6)
def func1(a, b):
print(a*b)
func1(5,4)
您需要 return a * b
,而不是打印它:
@banner('*', 6)
def func1(a, b):
return a * b
输出:
>>> func1(5, 4)
'******\n20\n******'
>>> print(func1(5, 4))
******
20
******
您需要 return 的原因是因为您的包装函数是在该 f 字符串的中间调用的,func(*args1)
。最初函数中只有一个 print
语句,如果未明确提供 return
,则您的函数默认为隐式 return None
,Python 中的所有函数默认为。
我正在尝试按如下方式打印图案:
******
20
******
我使用了装饰函数来打印主函数前后的图案。 但是我的代码没有打印模式,只有主要功能正在执行。 请建议我如何以更好的格式编写函数。
以下是我的代码:
def banner(str1, len1):
def decorator(func):
def wrapper(*args1):
new_line = '\n'
str2 = str1 * len1
return f'{str2}{new_line}{func(*args1)}{new_line}{str2}'
return wrapper
return decorator
@banner('*', 6)
def func1(a, b):
print(a*b)
func1(5,4)
您需要 return a * b
,而不是打印它:
@banner('*', 6)
def func1(a, b):
return a * b
输出:
>>> func1(5, 4)
'******\n20\n******'
>>> print(func1(5, 4))
******
20
******
您需要 return 的原因是因为您的包装函数是在该 f 字符串的中间调用的,func(*args1)
。最初函数中只有一个 print
语句,如果未明确提供 return
,则您的函数默认为隐式 return None
,Python 中的所有函数默认为。