python - 装饰器功能未执行
问题描述
我正在尝试按如下方式打印模式:
******
20
******
我使用装饰器功能在主功能之前和之后打印模式。但是我的代码没有打印模式,只有 main 函数正在执行。请建议我如何以更好的格式编写函数。
以下是我的代码:
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
******
您需要返回的原因是因为您的包装函数是在该 f 字符串的中间调用的,带有func(*args1)
. 如果函数中最初只有一条print
语句,则您的函数默认为return None
Python 中的所有函数默认为隐式,如果 areturn
未显式提供。
推荐阅读
- ruby-on-rails - 使用设计时在模型上自动设置 created_by
- reactjs - 如何在标头中传递授权令牌以响应 Axios.post?
- artifactory - 在虚拟或远程存储库的情况下,Artifactory 搜索 API 返回空列表
- powershell - 通过任务计划程序执行时,Powershell 脚本引发错误
- c - 我想从字符串中删除符号并反转字符串
- laravel - 在 Laravel 中为多模型使用图库图像
- json - 如何将null转换为空字符串?
- c++ - Know if CPU supports nanoseconds
- javascript - NodeJS 错误:无法 GET/ 在 Web 浏览器上运行 url
- c# - 如何在 C# 中解压缩 GZip 压缩字符串?