关于sys.stdout和print的区别详解

yipeiwu_com7年前Python基础

一、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的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python 实现矩阵按对角线打印

python 实现矩阵按对角线打印

如下所示: Description: 将一个矩阵(二维数组)按对角线向右进行打印。(搜了一下发现好像是美团某次面试要求半小时手撕的题) Example: Input: [ [1,2,...

tensorflow 只恢复部分模型参数的实例

我就废话不多说了,直接上代码吧! import tensorflow as tf def model_1(): with tf.variable_scope("var_a"):...

Django中ORM外键和表的关系详解

外键 在 MySQL 中,表有两种引擎,一种是 InnoDB ,另外一种是 myisam 。如果使用的是 InnoDB 引擎,是支持外键约束的。外键的存在使得 ORM 框架在处理表关系...

Python对列表中的各项进行关联详解

Python对列表中的各项进行关联详解

前言 我们在日常文本处理中,经常会将数据结构保存在列表中,如果将列表中的项进行关联,创建我们想要的字典结构,存取就会十分方便! 示例详解 比如说将List = ['Jerry 20 m...

如何基于Python实现电子邮件的发送

如何基于Python实现电子邮件的发送

这篇文章主要介绍了如何基于Python实现电子邮件的发送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 利用Python smtpli...