你会Python吗,python需要注意的问题

  你会Python吗,python需要注意的问题

  毫无疑问,打印功能是我们日常生活中最常用的功能。无论是打印格式,还是打印调试的中间变量,几乎没有打印做不到的工作。

  不过上次啊酱差点被印坑了。

  00-1010本来想给自己的一个命令行小工具增加一个进度显示功能,于是就用了线程模块来实现多线程。一个线程用于执行实际的逻辑,另一个线程用于打印当前的进度。

  点击并拖动根据我们的移动。

  经过多年的命令行使用经验,一般的打印进度都是行内打印,而Python的打印

  默认会在末尾打印一个换行符,非常不美观。

  幸运的是,print还提供了一个改变打印结束字符的接口。通过指定打印的结束参数,可以更改打印的打印结果。

  于是我开始嗡嗡嗡,把打印进度的print(# )调用改成print(# ,end= )。

  像这样:

  单击并拖动以移动它。但是这种改变有一个很大的问题:不能实时打印进度。

  单击并拖动以移动。也就是说,打印出来的#数字不应该是程序执行过程中听话可爱的#数字,而是会在整个程序执行完成后一次性输出到控制台。

  它长大了,也变丑了.

  点击拖动移动,那我问你有什么用?

  单击并拖动以移动

坑从何来

。一开始阿江以为多线程有问题,傻乎乎的到处找资料“证明”自己的各种猜测。3354,后知后觉,太傻了,现在还会是哈哈哈。

  单击并拖动以移动。这件事的教训是:不要自以为是,要脚踏实地解决问题,虚心对待每一个细节。

  其实我们看不到实时输出的原因是因为我们改变了print的结尾字符。

  为了尽量减少I/O操作,Python有这样一种机制:尽可能缓存输出字符,遇到字符串结束、换行符或缓冲区强制刷新时,只将缓冲区的内容一次性输出到对应的流中。

  3354我们所改变的是,我们删除了print的默认换行符,所以最初每次打印都会触发缓冲区刷新,但现在它直到程序结束才能触发缓冲区刷新。

  嗯,知道了问题是什么,我们又在找资料了。听说sys.stdout.flush可以强制触发标准输出缓冲区的刷新,所以在print之后,我们增加了sys.stdout.flush()。

  呃?这不是很好吗?

  还有点击拖拽移动这些都是知识点,赶紧记下来,你要考的东西。

  然后单击拖放进行移动。让我们来看看印刷的官方文件。它的原型是:

  单击并拖动以移动。根据下面的描述,Python中print的输出是否缓冲取决于两个参数:file和flush。

  有些类型的文件需要缓冲,比如sys.stdout而另一些则不需要缓冲,比如sys.stderr

  对于flush参数,当其值为False(默认)时,是否缓冲依赖文件;当它的值为True时,缓冲区将被强制刷新。

  让我们修改示例调用中的打印调用:

  点击拖动移动点击拖动移动实时打印也可以实现进度。

  另外,还有一种方法是在调用程序时添加-u选项,也可以实现缓冲区的实时刷新:

  单击并拖动以移动。单击并拖动以移动。当然不推荐这种方法。毕竟你不能对程序的使用者做任何预设。

  00-1010这篇文章是阿江踩坑的记录,记录了Python中很少有人会遇到的一个奇妙问题。

  总的来说,要成为一个真正的Python程序员,仅仅掌握基本的语法和一些小技巧是远远不够的,还是需要对Python本身有所了解。

  毕竟一个剑客如果不熟悉自己的剑,又怎么能在江湖上行走呢?

  相关免费学习推荐:python视频教程

  这些都是很多人在使用Python时走过的坑!对冲!更多详情请关注盛行IT软件开发工作室的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: