zoukankan      html  css  js  c++  java
  • 超牛 猴子补丁,修改python内置的print

    猴子补丁一般是用于修改三方包或官方包,也可以用来修改自己或者他人的代码。

    但也可以用来修改python 语言内置的关键字。

    本篇博客修改python最常用的内置print,使你使用print时候,自动打印出当前打印处的文件名和行号,并使用特殊的自创模板,使其在pycharm控制台中能够点击自动跳转到打印处。

    # -*- coding: utf-8 -*-
    # @Author  : ydf
    import sys
    import time
    
    
    # noinspection PyProtectedMember,PyUnusedLocal
    def nb_print(*args, sep=' ', end='
    ', 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}
    ')
        args = (str(arg) for arg in args)  # REMIND 防止是数字不能被join
        sys.stdout.write(f'"{file_name}:{line}"  {time.strftime("%H:%M:%S")}  33[0;94m{"".join(args)}33[0m
    ')  # 36  93 96 94
    
    
    # noinspection PyShadowingBuiltins
    print = nb_print
    if __name__ == '__main__':
        nb_print(123, 'abc')
        print(456, 'def')

    如果在其他文件使用print猴子补丁,保存以上代码到文件monkey_print.py中。

     然后用法是from monkey_print import *

    这样你写 print(‘bbbbbbbbbb’)   的效果就自动是下图中这样了,自动有了显示前缀。

    如何?你可以点击这个文件名链接自动跳转到打印代码发生处。 颜色可以自己用白色或者随便改。

    主要作用是如果项目人员中写得很low没有使用日志,而是疯狂大量print,但整个项目运行起来。套了很多层,不知道是哪里print的,使用此猴子补丁,可以一次性改变项目中所有print的行为,利于找到print是在哪里产生的。

    如果是新项目,最好用日志而不是print。

  • 相关阅读:
    nth-child与nth-of-type
    改变事件绑定的this的问题
    瀑布流的一些CSS实现方式
    事件捕获与冒泡的再探
    为学
    ECharts导出word 图表模糊失真
    垂直对齐:vertical-align:super属性
    Vuex- Action的 { commit } {commit}是什么写法
    修改对象中的属性名
    echarts 角度渐变环形图心得
  • 原文地址:https://www.cnblogs.com/ydf0509/p/10819818.html
Copyright © 2011-2022 走看看