You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python装饰器未执行无法打印指定星号装饰图案问题求助

问题解决

错误原因

  • 你定义的func1内部直接执行print(a*b)输出计算结果,函数自身的返回值为None
  • 装饰器的wrapper函数虽然将星号横幅、函数返回值拼接为了完整字符串,但这个最终字符串没有被打印,只触发了func1内部的打印逻辑,因此仅输出20,没有上下装饰图案。

修复方案

方案1:在装饰器内部直接完成打印(推荐,无需修改原函数调用逻辑)

def banner(str1, len1):
    def decorator(func):
        def wrapper(*args1):
            str2 = str1 * len1
            # 打印顶部横幅
            print(str2)
            # 执行原函数,保留原函数的打印逻辑
            func(*args1)
            # 打印底部横幅
            print(str2)
        return wrapper
    return decorator

@banner('*', 6)
def func1(a, b):
    print(a*b)

func1(5,4)

方案2:修改原函数为返回值,调用时打印装饰器返回的拼接字符串

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):
    # 改为返回计算结果而非直接打印
    return a*b

# 调用时打印装饰器返回的完整内容
print(func1(5,4))

两种方案运行后都将输出目标格式:

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

内容的提问来源于stack exchange,提问作者Deepak Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:09:05