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

yipeiwu_com6年前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代码实现KNN算法

kNN算法是k-近邻算法的简称,主要用来进行分类实践,主要思路如下: 1.存在一个训练数据集,每个数据都有对应的标签,也就是说,我们知道样本集中每一数据和他对应的类别。 2.当输入一个...

Python实现微信机器人的方法

Python实现微信机器人的方法

最近在学python的过程中无意间发现一个python库:wxpy,其可以实现让微信自动接收、处理消息并进行回复的一系列功能。感觉挺有意思的,便自行摸索学习,并成功地实现了其功能。 当我...

基于Python中求和函数sum的用法详解

基于Python中求和函数sum的用法详解 今天在看《集体编程智慧》这本书的时候,看到一段Python代码,当时是百思不得其解,总觉得是书中排版出错了,后来去了解了一下sum的用法,看了...

python实现按首字母分类查找功能

本文实例为大家分享了python实现按首字母分类查找的具体代码,供大家参考,具体内容如下 要求: 1.自己查找一些英文词汇,存储到某个容器类中 2.根据英文词汇的首字母进行分类,类似于...

python获得图片base64编码示例

  复制代码 代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import os, base64 icon = open...