朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
声明:在人工智能技术教学期间,不少学生向我提一些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