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

如何为代码中每个print语句添加额外输出?优先使用装饰器

需求与问题

我希望自动检测代码中调用的print语句,在其输出后自动添加一条空行,无需手动在每个print后添加空行。当前代码会连续输出10次“Hello”,期望每个“Hello”后跟随一个空行,重复10次。优先采用装饰器方案,也可接受其他解决方法。我尝试的代码如下:

def readability(func):
  def wrapper(*args,**kwargs):
    result = func(*args, **kwargs)
    if callable(func) and func.__name__ == 'print':
      print(' ')
    return result
  return wrapper

@readability
def printing():
  j=10
  while j>0:
    print('hello')
    j-=1

printing()

问题分析

你当前的装饰器作用在了自定义的printing函数上,而非内置的print函数,所以func.__name__ == 'print'这个判断永远不会成立,自然无法触发空行输出。

解决方案

方案一:装饰内置print函数(推荐)

直接装饰系统内置的print函数,让所有print调用自动追加空行:

def add_empty_line(func):
    def wrapper(*args, **kwargs):
        # 执行原print逻辑
        func(*args, **kwargs)
        # 输出空行
        print()
    return wrapper

# 替换内置print为装饰后的版本
print = add_empty_line(print)

def printing():
    j = 10
    while j > 0:
        print('hello')
        j -= 1

printing()

方案二:自定义替代打印函数

如果不想修改内置函数,可自定义一个带空行的打印函数,替换代码中的print调用:

def my_print(*args, **kwargs):
    # 先输出原内容
    print(*args, **kwargs)
    # 输出空行
    print()

def printing():
    j = 10
    while j > 0:
        my_print('hello')
        j -= 1

printing()

方案三:装饰器包裹函数(局部替换print)

通过装饰器临时替换函数内部的print引用,只对被装饰的函数生效,不影响外部:

def auto_empty_line(func):
    def wrapper(*args, **kwargs):
        # 保存原始print函数
        original_print = print
        # 定义带空行的新print
        def new_print(*args, **kwargs):
            original_print(*args, **kwargs)
            original_print()
        # 临时替换
        print = new_print
        try:
            # 执行原函数
            result = func(*args, **kwargs)
        finally:
            # 恢复原始print
            print = original_print
        return result
    return wrapper

@auto_empty_line
def printing():
    j = 10
    while j > 0:
        print('hello')
        j -= 1

printing()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:40:32