python函数的封装调用_Python封装一个函数来打印到变量
如果我有一個包含大量打印語句的函數(shù):
即.
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
因此,當(dāng)調(diào)用funcA時,它不會進(jìn)行任何打印,而是輸出到對象.然后我打印對象以獲得結(jié)果.有辦法做到這一點嗎?我也不想觸摸原來的功能.
我希望這是有道理的.
解決方法:
只要您不介意微小的語法差異,您幾乎可以完全按照自己的意愿行事:
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
微小的區(qū)別在于你必須調(diào)用getPrint(funA),而不是getPrint(funA()) – 也就是說,你必須傳遞函數(shù)對象本身,而不會在getPrint發(fā)揮其魔力之前立即調(diào)用它的尾隨括號.
如果你絕對堅持那些額外的括號,那么getPrint不能做所有必要的準(zhǔn)備工作,并且必須通過其他代碼來補充以正確準(zhǔn)備(我強烈建議丟失額外的括號,從而能夠封裝getPrint中的所有功能!) .
標(biāo)簽:python
來源: https://codeday.me/bug/20190713/1452379.html
總結(jié)
以上是生活随笔為你收集整理的python函数的封装调用_Python封装一个函数来打印到变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小公司要不要开对公账户
- 下一篇: 蚂蚁借呗怎么没了