关于sys.stdout和print的区别详解
一、sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%"
print函数是对sys.stdout的高级封装,看下print函数的解释
Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline.
print是默认调用了sys.stdout.write()方法将输出打印到控制台
print 也可通过file参数将输出打印到其他文件中
f = open('test.txt','a') print('this is a test',file=f)
二、sys.stdout.write()输出不会自动换行,没有end,可用转义字符自行控制
/n 换行
/r 回车到本行首,可刷新输出
如用sys.stdout.write() 和\r实现自定义进度条
# -*- coding: utf-8 -*- from tqdm import tqdm import time import sys for i in tqdm(range(100)): time.sleep(.1) for i in range(100): a = (i+1)/5 b = 20-a #sys.stdout.write('\r>>convert image %d/%d'%(i,b)) sys.stdout.write('\r|%s%s|%d%%'%(a*'▇',b*' ',i+1)) sys.stdout.flush() time.sleep(.1)
运行结果如下图:
sys.stdout.flush()强制刷新缓冲区,
缓冲区的刷新方式:
1.flush()刷新缓存区
2.缓冲区满时,自动刷新
3.文件关闭或者是程序结束自动刷新。
当我们需要打印一些字符时,并不是立刻就打印,而是先将需要打印的字符放入缓冲区,在缓冲区刷新时打印,当缓冲区未满,或者程序运行未结束时,可使用sys.stdout.flush()强制刷新缓冲区,立刻进行打印;
附:写出漂亮的进度条模块tqdm
from tqdm import tqdm import time for i in tqdm(range(10000)): time.sleep(0.01)
运行结果如下:
以上这篇关于sys.stdout和print的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
赞 (0)