问题: 有没有什么办法可以直接覆盖内置函数,不改变原有代码 比如 原来的代码中使用了print 我用某种方法在不改变原有代码的情况下,直接改变print的功能。
import builtins
# 保存原始的print函数
original_print = builtins.print
# 定义一个新的print函数
def custom_print(*args, **kwargs):
# 在这里添加你的自定义逻辑
print("自定义print开始")
original_print(*args, **kwargs)
print("自定义print结束")
# 覆盖内置的print函数
builtins.print = custom_print
# 测试
print("Hello, world!")
但是这个代码有一个问题。就是会报错。RecursionError: maximum recursion depth exceeded原因是,新函数中有print,造成了无限递归。
方法就是不要在custom_print中使用print。如果要输出到屏幕可以用其他方法替代。比如
sys.stdout.write(*args, **kwargs)
sys.stdout.flush() # 确保立即输出
%% import logging
logging.basicConfig(level=logging.INFO)
logging.info(*args, **kwargs)
最佳的解决方案,临时把print保存起来,相当于改一个名字。
import builtins
# 将原始的 print 函数存储到临时变量中
original_print = builtins.print
def new_print(*args, **kwargs):
# 在这里添加自定义的行为,比如记录日志、格式化输出等
original_print(*args, **kwargs)
# 用新的 print 函数替换内置的 print 函数
builtins.print = new_print
# 现在所有对 print 的调用都会执行新的 print 函数
print('Hello, world!')