【问题标题】:decorator function is not executing装饰器功能未执行
【发布时间】:2021-12-15 06:13:49
【问题描述】:

我正在尝试按如下方式打印模式:

******
20
******

我使用装饰器函数在 main 函数之前和之后打印模式。 但是我的代码没有打印模式,只有 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)

【问题讨论】:

  • 感谢@ddejohn,它工作正常并理解原因。由于我没有足够的积分来关闭问题,所以它仍然是开放的。
  • 你可以接受我的回答。这将结束这个问题。很高兴我能帮上忙。

标签: python python-decorators


【解决方案1】:

你需要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,如果未显式提供 return,则 Python 中的所有函数默认为。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2022-01-09
    • 2020-12-10
    • 2021-12-05
    • 2021-01-17
    • 2017-05-13
    相关资源
    最近更新 更多