0

非常简单的问题 - 我已经搜索但没有找到这个问题的答案。

这样做可能有点傻,但我很好奇是否可以挂钩到 python 3.X 的函数并在调用结束时print(*arg, **kwarg)覆盖它/添加。time.sleep(var)

当然,我可以定义另一种方法并用 a 包装它,time.sleep(var)但我只是好奇如何覆盖预构建的函数。

4

4 回答 4

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() 
于 2020-05-28T07:41:35.970 回答
2

你也可以试试这一个班轮

out = print
print = lambda *args, **kwargs: [time.sleep(1), out(*args, **kwargs)]
于 2020-05-28T07:58:44.347 回答
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

如果您现在想添加 sleep ,只需将其放入新功能即可

import time

old_print = print
def new_print(*args, **kwargs):
    old_print(*args, **kwargs)
    time.sleep(5)

print = new_print
于 2020-05-28T07:40:58.567 回答
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")

我总是添加这个文本

测试

于 2020-05-28T07:38:28.653 回答