Python中print()本质与sys.stdout.write()区别

在Python中print()命令普通常见,其本质是怎么运行的?估计知道的人不多…

print语句实现打印,技术上来说就是把一个或多个对象转换为其文本表达式形式,然后发送给标准输出流或者类似的文件流。

Python中向一个文件写东西是通过file.write(str)来实现,而print语句执行的操作本质也是一个写操作,只是将数据写到了stdout流并进行了特定的格式化。

  • print(obj)实质就是调用sys.stdout.write(obj ’\n’)

# 两者等价
sys.stdout.write('hello' '\n')
print('hello')

此处sys.stdout就是python中标准输出流,这个标准输出流默认是映射到打开脚本的窗口的,所以,我们的print操作会把字符打印到屏幕上。既然sys.stdout默认是映射到打开脚本的窗口,那么这个映射关系是否可以修改呢?

答案是肯定的,我们可以通过修改这种映射关系来把我们的打印操作重定向到其它地方,例如特定的文件。

  • print()重定向到某个指定文件

方法就是给sys.stdout赋值,修改它的指向。

import sys
sys.stdout = open('test.txt','w')
print 'Hello world'

我们让sys.stdout指向了一个文件对象。然后,再执行打印操作,这时,hello world输出在了一个文件test.txt中,也就是写入其中。

  • 指定文件对象的print()怎么恢复

我们把打印重定向到了一个文件中,那么在程序后面每一处调用print操作的输出都在这个文件中,那么我们后面想要打印字符到屏幕怎么办?

所以,这就需要我们先保存原始的sys.stdout,后面想要恢复的时候再赋值就行了,实现如下:

import sys
temp = sys.stdout
sys.stdout = open('test.txt','w')
print 'hello world'
sys.stdout = temp #恢复默认映射关系
print('nice')
  • 输出类型

stdout只能输出字符串,如果要输出数字,也需要先转成字符串形式的;

print可以直接输出各种类型。

  • 换行

stdout输出结果后不自动换行,可以实现一些特殊要求,比如进度条。通过’\r’将游标移动到原行的行首,重新输出覆盖掉原来内容,实现动态进度条。

print会自动换行。

  • 输出位置

print是默认调用了sys.stdout.write()方法将输出打印到控制台

print 也可通过file参数将输出打印到其他文件中。

f = open('test.txt','a')
print('this is a test',file=f)

.
.
.
2019-02-19 21:18:24写于泰安市肥城市

(0)

相关推荐

  • Python字体颜色设置

    Python字体颜色设置 平时学习工作中,我们经常会接触到一些大佬写的Python工具,运行起来总会显示出五颜六色的字体,比如红色代表Error , 黄色代表Warning , 绿色代表Success ...

  • Python No.19_文件操作(增删改查)

    # !/usr/bin/env python# -*- coding:utf-8 -*-# Author:Hugolinhj '''对文件的操作流程1.打开文件.得到文件句柄并赋值给一个变量2.通过句 ...

  • Python中read、readline和readlines的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • python中如何使用print函数

    Python中print语句 (推荐教程:python基础教程) 1.逗号分隔符 在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例: ...

  • python中stdout是什么意思

    当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj '\n') print 将你需要的内容打印到了控制台,然后追加了一个换行符& ...

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...

  • Python中tuple和list的区别?基础学习!

    想必大家都知道,Python数据类型有很多种,其中有两个对象的写法非常相似,它就是tuple元组和list列表,让人傻傻分不清楚.那么你知道Python中tuple和list有什么区别吗?我们来看看具 ...

  • Python中缩进是什么?入门分享!

    众所周知,Python是一门独特的编程语言,它语法清晰.简单易学,而且Python是通过缩进来识别代码块的,因为一般的语言都是通过{}或者end来作为代码块标记. Python中缩进是什么? 要求严格 ...

  • python中的内置函数

    前言 本人只在csdn写博客 内置函数 介绍 一. 数学运算 abs()求绝对值函数 round() 近似取值 pow()求指数 divmod()求商和余数 max()求最大值和min()求最小值 s ...

  • 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  • 【青少年编程】Python中的分号

    今天有小朋友问我以下的选择题: 关于Python赋值语句,以下选项中不合法的是() A. x = (y=1) B. x, y = y, x C. x = y = 1 D. x = 1; y = 1 这 ...