python的print()方法你真的get了么?(一)

起因于老师写的一小段代码

在这里插入图片描述
说实话我从来觉得print()方法有什么特别的,一直都在用
偶尔加个end,sep啥的也都不是问题
但是老师的这句代码我刚开始看的时候居然没明白啥意思,file后面的是一个open的文件对象,我看file分明是一个参数,可是我怎么不知道还有file这个参数,虽然老师写的其他代码也一样看不懂,参数也都不知道,但是!但是print()这个最常用的我居然不知道
赶紧ctrl一下,看了一下源码,还真有这个参数,而且还有一个flush参数一样没见过
在这里插入图片描述

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)    
    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.
    flush: whether to forcibly flush the stream.

下面是我搜索资料查到的,外加一点自己的总结

file: --标准输出的目标,默认是控制台,即sys.stdout,可以指定输出到文件
flush: --强制刷新缓存的流,可以在使用print()输出重定向到文件时立即刷新文件的内容    

开始重新认识print()

作为一个连程序员都算不上的小白,只能通过查阅资料来解决问题,看源码是不可能看的,看也看不懂。
网上蛮多的下面的例子,具体差不多,可能起源于菜鸟教程,不过菜鸟里面没有说的太清楚。
先看代码:ヾ(・ω・`。)

import time
print('-- Loading: 效果 --')
print('Loading', end=' ')
for i in range(20):
    print('\r', '{0}+{1}={2}'.format(i, i + 1, 2 * i + 1), end='', sep='&', flush=True)
    time.sleep(0.5)

实现的结果就是实时刷新输出,很多程序高大上的进度条就是这样实现的,虽然大佬都是直接导入sys包,但是print()也相当于调用了sys.stdout.write(),鉴于结果一样,还是先搞清楚print()再去搞sys。
想要实现实时刷新的状态格式不可缺少,下面是我的一些笔记和总结

简单说就是将缓存里面的内容立即输出到标准输出流(这里是sys.stdout, 也就是默认的显示器)
这个功能在客户端脚本几乎用不上, 大多用于服务器端
比如反向Ajax里面就要用到flush, 举个例子: 在线web聊天页面会实时显示聊天的内容, 其实后台是一直在向服务器请求数据的, 正常情况下是请求完毕之后才会输出相应内容, 但是是即时聊天, 需要一有相应就得立即返回, flush也就起作用了

具体的使用flush生效的方法
print('\r' + str(i), end='', flush=True)
前面需要加一个'\r',然后end='', flush=True
标准格式print('\r', 输出内容, end='', flush=True)  # end参数不要设置为\r, \n默认就是\n,不会实时刷新,起作用的应该是\r和flush,又需要输出之后不换行,flush实时刷新,加sep参数也不碍事
\r是把光标的位置回退到本行的开头位置
前面需要空格的话可以在\r的后面加\t即

print('\r\t', '输出内容', end='', flush=True)

用来刷新之前的输出内容
具体思想,实时生效\r命令,更改默认换行的end值,实时刷新

好吧,其实一开始关心的是file参数,但是后来查着查着就变成了flush,
在这里插入图片描述
file参数就下次再详解吧,我其实蛮关心这个参数可以写入什么格式的文件,具体思想就是重定向

再次查看的时候发现去除flush参数也是可以的,起决定的命令是\r,flush果然是用来写入文件时候刷新的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值