猴子補丁通常是用於修改三方包或官方包,也能夠用來修改本身或者他人的代碼。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