gpt4 book ai didi

Python封装函数打印到变量

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:52 32 4
gpt4 key购买 nike

如果我有一个包含大量打印语句的函数:

即。

def funA():
print "Hi"
print "There"
print "Friend"
print "!"

我想做的是这样的

def main():
##funA() does not print to screen here
a = getPrint(funA()) ##where getPrint is some made up function/object
print a ##prints what funA would normally print at this step

所以当 funcA 被调用时它不做任何打印,而是输出到一个对象。然后我打印对象以获得结果。有没有办法做到这一点?我也不想触及原来的功能。

我希望这是有道理的。

最佳答案

几乎可以完全按照自己的意愿行事,只要您不介意细微的语法差异即可:

import cStringIO
import sys

def getPrint(thefun, *a, **k):
savstdout = sys.stdout
sys.stdout = cStringIO.StringIO()
try:
thefun(*a, **k)
finally:
v = sys.stdout.getvalue()
sys.stdout = savstdout
return v

微小的区别是您必须调用 getPrint(funA)不是 getPrint(funA()) —— 也就是说,您必须传递函数对象本身,没有会立即调用它的尾随括号,之前 getPrint 可以发挥它的魔力。

如果你绝对坚持那些额外的括号,那么 getPrint 就无法完成所有所需的准备工作,必须辅以其他代码才能做好准备工作(我强烈建议去掉额外的括号,从而使所有功能都封装在 getPrint 中!)。

关于Python封装函数打印到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1983401/

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