装饰器函数未执行

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 中的所有函数默认为。