猴子补丁通常是用于修改三方包或官方包,也能够用来修改本身或者他人的代码。python
但也能够用来修改python 语言内置的关键字。函数
本篇博客修改python最经常使用的内置print,使你使用print时候,自动打印出当前打印处的文件名和行号,并使用特殊的自创模板,使其在pycharm控制台中可以点击自动跳转到打印处。ui
# -*- coding: utf-8 -*- # @Author : ydf import sys import time # noinspection PyProtectedMember,PyUnusedLocal def nb_print(*args, sep=' ', end='\n', file=None): """ 超流弊的print补丁 :param x: :return: """ # 获取被调用函数在被调用时所处代码行数 line = sys._getframe().f_back.f_lineno # 获取被调用函数所在模块文件名 file_name = sys._getframe(1).f_code.co_filename # sys.stdout.write(f'"{__file__}:{sys._getframe().f_lineno}" {x}\n') args = (str(arg) for arg in args) # REMIND 防止是数字不能被join sys.stdout.write(f'"{file_name}:{line}" {time.strftime("%H:%M:%S")} \033[0;94m{"".join(args)}\033[0m\n') # 36 93 96 94 # noinspection PyShadowingBuiltins print = nb_print if __name__ == '__main__': nb_print(123, 'abc') print(456, 'def')
若是在其余文件使用print猴子补丁,保存以上代码到文件monkey_print.py中。spa
而后用法是from monkey_print import *日志
这样你写 print(‘bbbbbbbbbb’) 的效果就自动是下图中这样了,自动有了显示前缀。code
如何?你能够点击这个文件名连接自动跳转到打印代码发生处。 颜色能够本身用白色或者随便改。blog
主要做用是若是项目人员中写得很low没有使用日志,而是疯狂大量print,但整个项目运行起来。套了不少层,不知道是哪里print的,使用此猴子补丁,能够一次性改变项目中全部print的行为,利于找到print是在哪里产生的。utf-8
若是是新项目,最好用日志而不是print。get