我正在使用以下签名
在Python中编写函数def print_results(input_file, output=None)
参数input_file
只是一个文本文件,output
也是如此。如果提供了输出文件,我想在那里写结果。否则,我想将它们打印到标准输出。
我想这样做,我不必重复代码。截至目前,该函数看起来像这样:
def print_results(input_file, output=None):
// Do some computation
if output:
with open(output) as out:
// Print results to output file
else:
// Print results to standard output
有没有办法合并我打印结果的部分,这样只需要做一次?
答案 0 :(得分:2)
使用当前代码您无法轻松,因为out
的范围仅限于with
- 阻止。因此,让您的函数接受流,而不是文件名。比起来容易:
def print_results(input_file, outf = sys.stdout):
# Print results to outf
这也将使您的代码具有通用性,因此它将接受StringIO对象。
要打印到标准输出,请使用以下功能:
print_results(...)
要打印到文件,请使用:
with open(output) as outf:
print_results(..., outf=outf)
答案 1 :(得分:0)
使用sys.stdout:
if not output:
output=sys.stdout
else:
output=open(output, 'w')
print(data, file=output)
if output is not sys.stdout:
output.close()
答案 2 :(得分:0)
在python 3.x中print
是一个函数,因此您可以轻松地减少if/else
语句。
def print_results(input_file, output=None):
// Do some computation
if output:
out = open(output,mode) #mode which ever you want to open
print_func = out.write if output else print
print_func(result) //print result to std output or file
在python 2.x中print
只是一个声明,所以要实现这一点有点复杂,你必须从未来的模块导入打印功能。在代码的顶部使用:
from __future__ import print_function