声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的​​教学网站​​。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

print的内部相当于调用了sys.stdout。print和sys.stdout的关系如下:

print(X,Y)           # Or,in 2.6: print X,Y

等价于:

import sys

sys.stdout.write(str(X) + ' ' + str(Y) + '\n')

而我们可以把sys.stdout重新赋值给标准输出流以外的东西。换句话说,可以让print语句将文字传送到其他地方。例如:

import sys

sys.stdout = open('log.txt','a') # Redirects prints to a file

...

print(x,y,x) # Shows up in log.txt

在上面的代码中我们把sys.stdout重设成已打开的文件对象。重设之后,程序中任何地方的print语句都会将文字写至文件log.txt的末尾,而不是原始的输出流。

在打印至文件后,还可以切换回来。因为sys.stdout只是普通的文件对象,你可以存储它,需要时再恢复它。

C:\misc> c:\python30\python

>>> import sys

>>> temp = sys.stdout # Save for restoring later

>>> sys.stdout = open('log.txt','a') # Redirect prints to a file

>>> print('spam') # Prints go to file,not here

>>> print(1,2,3)

>>> sys.stdout.close() # Flush output to disk

>>> sys.stdout = temp # Restore original stream




>>> print('back here') # Prints show up here again

back here

>>> print(open('log.txt').read()) # Result of earlier prints

spam

1 2 3

在Python 3.0中,file关键字允许一个单个的print调用将其文本发送给一个文件的write方法,而不用真正地重设sys.stdout。因为这种重定向是暂时的,普通的print语句还是会继续打印到原始的输出流的。在Python 2.6中,当print语句以>>开始,后面再跟着输出的文件对象时,会有同样的效果:

log = open('log.txt','a')         # 3.0

print(x,y,z,file=log)# Print to a file-like object

print(a,b,c) # Print to original stdout


log = open('log.txt','a') # 2.6

print >> log,x,y,z # Print to a file-like object

print a,b,c # Print to original stdout