一个非常简单的问题-我已搜索但未找到此问题的答案。
这样做可能有点愚蠢,但是我很好奇是否可以挂入python 3.X的print(*arg, **kwarg)
函数并覆盖它/在末尾添加time.sleep(var)
调用。
当然,我可以定义另一种方法并用time.sleep(var)
包装它,但是我很好奇一个人将如何覆盖预建函数。
答案 0 :(得分:3)
如果要全局修补任何功能,例如为了进行测试/调试,最安全的方法是使用unittest.mock.patch()
:
def x():
'''the code under test'''
print('Hello, world!')
...
from unittest.mock import patch
orig_print = print
with patch('builtins.print') as m:
def my_print(*args, **kwargs):
orig_print('PATCHED:', *args, **kwargs)
m.side_effect = my_print
x() # prints 'PATCHED: Hello, world!'
# prints 'Hello, world!', because the patch context is exited
# and the original function is restored:
x()
答案 1 :(得分:2)
您也可以尝试使用这种内胆
out = print
print = lambda *args, **kwargs: [time.sleep(1), out(*args, **kwargs)]
答案 2 :(得分:1)
您可以,您可以执行以下操作:
def new_print(*args, **kwargs):
# Your new print function here
pass
print = new_print
建议保存旧的打印功能,如果要在打印功能中使用它,则将需要它。 你可以这样做
old_print = print
def new_print(*args, **kwargs):
old_print(*args, **kwargs)
print = new_print
如果您现在想为此添加睡眠,只需将其放入新功能即可
import time
old_print = print
def new_print(*args, **kwargs):
old_print(*args, **kwargs)
time.sleep(5)
print = new_print
答案 3 :(得分:0)
只是为了证明它可以工作,这里举一个例子。如您所知,绝对不建议这样做。
import sys
def new_print(msg):
sys.stdout.write("I always add this text\n")
sys.stdout.write(msg)
print = new_print
print("Test")
我总是添加此文本
测试