4.4 输出

4.3.1 print()

基本语法

print函数的一般语法如下:

print([object, …][, sep=’ ‘][ , end=’\n’][, file=sys.stdout][, flush=Flalse]

其中, object是需要打印的对象,可以是一个也可以是多个。sep表示对象之间的分割符号;end表示结尾字符串;file表示输出流;flush是一个布尔值,True表示刷新输出缓存区,False表示不刷新输出缓存区。如果不人为对sep,end等参数进行设定,那么print函数将会采用上述默认配置进行输出。

如果不向print函数传入任何参数,那么print函数默认向标准输出流打印一个换行符。

如果需要打印的内容是一个字符串,通常可以省去print函数,直接对字符串两头加双引号即可。

如:

>>>”你喜欢Python吗?我很喜欢!”

你喜欢Python吗?我很喜欢!

4.3.2 sys.stout

基本语法

我们已经深入学习了print函数的用法及功能,我们同样可以用sys.stout接口来实现,不过稍显复杂。

>>>import sys

>>>sys.stdout.write(‘你喜欢Python吗?我很喜欢!\n’)

你喜欢Python吗?我很喜欢!

17(?)

sys.stdout.write的返回值为字符串的个数。因为默认在交互模式下会输出函数返回值,所以最后输出了该字符串的个数。而在命令行里执行已经写好的py脚本,则不会出现这种问题。

值得注意的是,stdout只能输出字符串,如果需要输出数值,必须对其进行类型转换。我们通过str()函数可以完成对数值型向字符串型的转换,也可以通过在数值两旁加” ‘ “号,完成数值向字符串类型的转换。我们可以使用”+”来对字符串进行连接。

通过对sys.stout接口中,write函数的调用,我们可以实现与print函数相同的功能。

下面我们通过输出“我使用python超过10年。“来对print函数和stdout.write在实现同样功能时的语法差异进行总结:

方法printstdout.write

1

print(‘我使用python超过10年)

sys.stdout.write(‘我使用python超过10年\n’)

2

print('我使用python超过'+str(10)+'年')

sys.stdout.write(‘我使用python超过’+str(10)+’年’+\n)

重定向输出流

一般来说,python默认将文本发送到标准输出流。在实际应用中,当面临控制台输出大量信息超出其缓存范围时,控制台会自动对历史信息进行丢弃,这时候我们需要把文本输出到别的地方,例如将文本输出到本地磁盘文件进行保存。这种方式我们称之为打印流重定向。

在我们对sys.stdout的输出重定向操作进行讲解前,请先阅读下面一段代码。

>>>import sys

>>>temp=sys.stdout #保存默认输出位置

>>>sys.stdout=open(‘d:/love_python.txt’, ‘a’) #输出重定向

>>>print(‘我喜欢python’) #输出

>>>sys.stdout.close() #关闭重定向,回复默认,将缓存写入硬盘

>>>sys.stdout=temp #回复默认输出位置

上述代码要完成的功能是向d盘love_python.txt文件中输入”我喜欢python”。我们通过使用open函数把输出流方向指定为d盘下的love_python.txt文件。因为反斜杠’\’在字符串中表示转义字符,所以在输入文件绝对路径时,路径分隔符’\’要使用两个连续的反斜杠即’\\’或一个正斜杠’/’替代。’a’表示,以追加的方式向love_python.txt文件中写入字符。

print语句会持续调用sys.stdou.write函数,将本应输出到shell中的字符串全部重定向到love_python.txt文件中。

close函数会将缓存数据写入硬盘。同时会关闭重定向。

这时候,如果我们在此调用print函数,就会报错,提示,ValueError: I/O operation on closed file. 输入输出在一个关闭的文件上。这就使我们产生了疑问,关闭重定向前使用print函数输出的字符串,到底去了哪里?答案是这样的,sys.stdout是一个文件对象,我们既可以对它接收到的字符串进行存储,也可以更改它重定向的位置。我们在使用print函数过程中,先是将字符串流输入到了sys.stdout中,然后调用close函数将这个文件对象关闭,同时将数据写入硬盘。这个时候,再次调用print函数,就会失去将内容输出的对象,我们需要重新对sys.stdout进行定义。通过使用变量temp将原始输出位置储存下来,在重定向输出到磁盘文件结束后,将temp值赋给sys.stdout,即可完成sys.stdout的恢复。

这时候让我们再次使用print打印“我喜欢python”,shell上就会重新显示打印内容了!

Last updated