假设我们有以下虚拟函数: import sys
def writeline(text, stream=sys.stdout):
stream.write(text + '
')
with open('/path/to/file', 'w') as f:
# writes to /path/to/file
writeline('foo', f)
# writes to standard output
writeline('bar')
鉴于python在定义时评估了函数的默认参数,将sys.stdout设置为默认参数是安全的,还是会产生意想不到的副作用?
最佳答案
我想到的一个问题是,您有时有时想自己将sys.stdout重定向到文件(或管道,设备等).
例如,您的主程序可能如下所示: if __name__ == '__main__':
if len(sys.argv) > 1:
sys.stdout = open(sys.argv[1],'w')
try:
# ... run the program
finally:
if len(sys.argv) > 1:
sys.stdout.close()
如果您希望程序在提及一个文件时将其记录到一个文件中(例如python3 file.py logfile.log),这可能会很有用.现在,由于您设置了sys.stdout,因此您的writeline方法将不会注意到该修改.
因此,我认为写这样更安全: def writeline(text, stream = N