gpt4 book ai didi

python - 如何重载打印功能以扩展其功能?

转载 作者:太空狗 更新时间:2023-10-30 00:35:53 26 4
gpt4 key购买 nike

我想知道是否可以覆盖内置函数 print 以便以下语句同时写入控制台和文件。

print("test0","test1","test2",sep='\n') 

另外,请问是否可以修改内置print函数的源代码?

最佳答案

使用装饰器。简化示例:

def my_decorator(func):
def wrapped_func(*args,**kwargs):
return func("I've been decorated!",*args,**kwargs)
return wrapped_func

print = my_decorator(print)

测试:

print("TESTING") #I've been decorated! TESTING

所以要同时打印到一个文件,你可能会这样做:

def super_print(filename):
'''filename is the file where output will be written'''
def wrap(func):
'''func is the function you are "overriding", i.e. wrapping'''
def wrapped_func(*args,**kwargs):
'''*args and **kwargs are the arguments supplied
to the overridden function'''
#use with statement to open, write to, and close the file safely
with open(filename,'a') as outputfile:
outputfile.write(*args,**kwargs)
#now original function executed with its arguments as normal
return func(*args,**kwargs)
return wrapped_func
return wrap

print = super_print('output.txt')(print)

如果将其与上面的示例进行比较,您会发现在这种情况下还有一个额外的闭包(即,return wrapped_func AND return wrap 而不仅仅是 返回 wrapped_func)。第二个闭包允许我们向包装器/装饰器函数发送一个额外的参数(文件名)。

最后一行的语法看起来有点奇怪,但这是正确的方法。对 super_print('output.txt') 的调用返回一个对象,然后将该对象作为附加参数提供给 print 函数对象。整个事情都是通过闭包来工作的;如果您没有跟上速度,请研究它们。

然后:

print('test')

test 将写入控制台输出和 output.txt。

关于python - 如何重载打印功能以扩展其功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com