python里你有所不知的print语句和flush()方法(内含详细解析及新手易错点)_python的print函数的flush_逆流之路的博客-程序员秘密

技术标签: python杂项  

在编代码时,发现学了很多语句,对print里反而只知道些  格式化  和 end=  一类的老生常谈的东西,在的print进行再学习后get了一些新姿势,从而对print在怎么来的有了自己的答案

以下是我get知识点的运用(理论知识放在后面):

1.用print来写入文件:

把文件打开,给出写入权限,把写入内容以utf-8进行编码
f = open("./python基础篇.txt", 'w',encoding='utf-8')
for i in range(10):
    #该语句是将print输出语句,输出到文件里
    print("第{0}条数据".format(i), file=f)

 

2.用print来显示加载进度:

import time
inner = 500
for n in range(inner+1):
    loading = round(n/inner*100)
    #通过加\r每次输出完跳回,用end=""替换默认的换行,只要数字在改变,因此表面上展现进度刷新
    print(f"\r加载中{loading}%",end="")
    #由于没有放入复杂程序,如果直接打印,展示不出效果,因此用time.sleep模拟加载过程
    time.sleep(0.02)

这里附加新手易错点:

  1. print内为赋值语句:报错TypeError(这里要除了 sep=''   or  end=''  这两默认参数)
  2. print内为函数调用如 print(l.append(1)) 由于这类对数据内部进行改造,无返回值,return被默认为none
  3. print(sorted(lis))对数据进行改造,返回值是一个新的副本

 

以下是我的学习过程:

对print你必须知道的:在python中,print语句实现打印,从技术角度来说,这是把一个或多个对象转换为其文本表达式形式,然后发送给标准输出流或者类似的文件流,更详细的说,打印与文件和流的概念紧密相连。

print(self, *args, sep=' ', end='\n', file=None)

下面是不常使用的参数,官方的解释

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.

下面是机翻:

文件:类似文件的对象(流);默认为当前sys.stdout。

sep:插入值之间的字符串,默认为空格。

结束:最后一个值后面的字符串,默认是一个换行符。

刷新:是否刷新缓冲区

 

简单解释下参数:

默认参数:file=sys.stdout,print 函数是对sys.stdout的高级封装,对此不了解,请移步:https://blog.csdn.net/he_and/article/details/80675070?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

这里有一个大佬对print与sys.stdout关联,和其作用方式,看上几遍,你会发现新天地

sep:ex:print(1,2,3,sep="-")  #1-2-3 ,换个角度理解,就是把逗号代表空格这一默认值,转换为代表自定义的字符串

end:默认换行符结尾,可自定义print(1,2,3,end="-") ;print(1,2,3,end="-")#1 2 3-1 2 3(用烂了,一般改为end="",连续输出)

 

没在print从用过flush语句,因此进行探究

话不多说来段定义:

        print语句执行的操作其实也是一个写操作,不过他把我们从外设输入的数据写到了stdout流,并进行了一些特定的格式化。           当然,和文件方法不同,在执行打印操作是,不需要将对象转换为字符串(print已经帮我们做好了)。

对于flush,我看了众多博文,总结起来是:

flush方法:

功能:把缓冲区的数据强行输出,清空缓冲区。

作用:

  在该问题下:在读写流中数据先被读到内存(相当于缓存区),再写入,中途用close()方法关闭读写流,缓存数据会丢失

  用flush()方法:刷新缓存区,强制把其中数据写入文件,清空缓冲区,避免数据丢失

在print里flush默认是False,写成True后每次调用执行该语句时,都会把语句的内容放到文件中(如果有用file方法的话)

(这是一个较直观的展现)

 

简化理解:就是,假期时老师一布置作业,学霸就开始写,没写完就不玩,而学渣本渣要等到开学前一天通宵学习,到上学做不                 完了,可能还要作业没搞定就交差了。用flush就是学霸本霸了(巨不专业,理解意思就行,没谁厉害,只有适合与否)

 

 

各位大佬们,如果觉得这篇文章对你有那么一点点帮助,点个赞呗,谢谢

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44716687/article/details/105675638

智能推荐

linux下编译出现tmp空间不足解决办法_壁虎漫舞的博客-程序员秘密

编译的时候出现问题:Vargen.c:551: fatal error: error writing to /tmp/ccybwTg3.s: No space left on device主要是系统 /tmp/空间不足引起的,tmp文件夹空间不足了,不能满足编译的需求,编译的中间文件不能写入。解决办法 :你可以在空间充足的地方mkdir 文件夹——你可以使用的文件夹,例如:

Ubuntu下运行.sh文件_ubuntu .sh_深山里的小白羊的博客-程序员秘密

1. .sh文件是Ubuntu下可执行文件,首先需要确定它的权限是否是可执行的,运行下面的语句可添加权限:chmod a+x filename  2. 用vim打开sh文件:vi filename  3. 查看文件格式::set ff 或 :set fileformat  4. 修改文件格式::set ff=unix 或 :set fileforma...

Linux创建WIFI热点_linux 创建wifi热点_Kei Mou的博客-程序员秘密

使用manjaro的时候,作为已选择的kde桌面,它的网络设置里已经集成了wifi的创建。1、打开网络配置界面这里可以从任务栏的网络链接图标的设置按键进入2、创建WIFI热点链接当进入配置界面后,点击创建按钮进行wifi热点的添加:然后弹出的界面就可以看到 有线以太网 和 WI-FI这两个项目还有后缀(共享)的副项目。不难理解,WI-FI(共享)这个项目就是我们要创建的WIFI热点,...

【R-CNN目标检测系列】二、边界框回归(Bounding-Box Regression)_daipuweiai的博客-程序员秘密

前言在上一篇博文:【计算机视觉——RCNN目标检测系列】一、选择性搜索详解我们重点介绍了RCNN和Fast RCNN中一个重要的模块——选择性搜索算法,该算法主要用于获取图像中大量的候选目标框。为了之后更加顺利理解RCNN模型,在这篇博文中我们将主要介绍RCNN及其改进版本——Fast RCNN和Faster RCNN中一个重要模块——边界框回归(Bounding-Box Regression)...

“System.AccessViolationException”类型的未经处理的异常在 OpenCvSharp.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏_吴春旭呀的博客-程序员秘密

问题描述:1、程序半小时前还好好的,但是,电脑突然蓝屏重启后,再打开我的程序运行时,就出现标题所写的问题;2、网上搜索了各种方法,好像和我的问题都没关系;解决方法:运行前,重新生成一下,竟然好了,,,,你妹的,浪费了我大半天时间,记录一下这很扯蛋的bug。而且只有这个程序,每次修改后,都需要重新生成一下,然后才能启动运行, 才能不报标题所写的错误,同一个项目下的其他程序,修改后不需要重新生成,直接运行才可以,很奇怪。...

随便推点

redis key 键名称中的冒号 : 命名空间层次的表示_redis 冒号分隔符含义_锦天的博客-程序员秘密

https://redis.io/topics/data-types-introhttps://stackoverflow.com/questions/6965451/redis-key-naming-conventionshttps://answer-id.com/51740587Very short keys are often not a good idea. There is little point in writing “u1000flw” as a key if you can inst

使用yolo对图片,视频,连接相机进行物体检测_-MK-的博客-程序员秘密

最近要用yolov4进行物体检测,把其中的一些问题写下来,首先按照要求安装yolov4需要的各种东西opencv,cudnn,cuda等等,然后将源码下载下来编译,将makefile里要用的改为=1,然后make,下载对应的权重检测:在终端运行:以下可以用v4的权重1.检测视频MP4.avi./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <filename…>2.网络相机实时检测./darkn

Google Colab文件功能的使用_qq_25987491的博客-程序员秘密

执行shell命令:语句前加 ' ! '可以执行shell命令!ls输出:create_data.py example.txt save train.pydatalab file_list.txt show 牛津花卉数据集基本上大部分 linux命令都可以这样执行,但是好像vim命令不可以基本代码段的使用:google colab提供了一下方法操...

手把手教你从数据预处理开始体验图数据库_图数据库NebulaGraph的博客-程序员秘密

本文首发于 Nebula 公众号:手把手教你从数据预处理开始体验图数据库,由社区用户 Jiayi98 供稿,分享了她离线部署 Nebula Graph、预处理 LDBC 数据集的经验,是个对新手极度友好的手把手教你学 Nebula 分享。这不是一个标准的压力测试,而是通过一个小规模的测试帮助我熟悉 Nebula 的部署,数据导入工具,查询语言,Java API,数据迁移,以及集群性能的一个简单了解。准备所有的准备都需要找个有网的环境docker RPM 包 https://docs.docker.

Rundll32.exe使用方法大全_如何运行rundll32进程_黑暗行动的博客-程序员秘密

winexec(Pchar('StrCommand'),sw_Show); 其中"StrCommand"代表以下命令之一(使用Windows中的运行不要加引号): "rundll32 shell32,Control_RunDLL" - 运行控制面板 "rundll32 shell32,OpenAs_RunDLL" - 打开"打开方式"窗口 "rundll32 shell32,ShellAboutA

标记语言基础知识_rookie_beginner的博客-程序员秘密

标记语言基础知识标记语言 是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括文本的结构和表示信息等)与原来的文本结合一起,但是使用标记进行标识。 标记语言不仅仅是一种语言,就像许多语言一样,它需要一个运行时环境,使其有用。提供运行时环境的元素称为用户代理。标记语言分类 1.标识性的:全称“标识性置标[^1]语...

推荐文章

热门文章

相关标签