遇到一個需求是,需要修改 python print function 的行為,讓每一次 print 呼叫之後都立即 flush。查到 python 有一個 partial function 可以修改 print 的行為。
- from functools import partial
- print = partial(print, flush=True)
- import my_module
原本以為只要將程式放到 import 之前,就可以影響到之後 import 的 module,但是發現沒有作用,這是因為 partial 的作用域只有在執行 partial 的該 module 內,無法影響到其它 module。後來發現 python 有個 builtin module,所有內建的函式都在裡面,我們在呼叫內建的函式時,最後都是參考到 builtin module,就想是不是可以直接替換掉 builtin module 內的 print 函式,一試果然就成功了。
- import builtins
- from functools import partial
- builtins.print = partial(print, flush=True)
- import my_module
替換掉 builtin 內的 print 後,之後所有呼叫的 print,不管是在哪個 module,都會參考到新函式,真是很方便。
沒有留言:
張貼留言