关于 sys.stdout.write 的疑问

2014-10-10 23:33:22 +08:00
 pysama
python 实现下载进度条用到了这样的代码:sys.stdout.write("\r%2d%%" % percent)。求解释\r%2d%%这段字符串。(我查了string format的相关知识,也没有看到解释)
5225 次点击
所在节点    Python
10 条回复
sandtears
2014-10-10 23:57:52 +08:00
\r 是格式控制代表回车
%2d 代表长度为 2 的整数
%% 就是一个 %
jsq2627
2014-10-11 00:11:47 +08:00
\r表示return,光标回到当前行首。所以能实现单行刷新的进度条效果。
pysama
2014-10-11 09:43:19 +08:00
@sandtears %2d 代表长度为 2 的整数,%% 就是一个 %,这里的%是不是可以理解为转义符一样呢
有可以参考的详细文档吗?我想看个明白。 [自己没有搜索到

@jsq2627 非常感谢
tonghuashuai
2014-10-11 10:20:23 +08:00
第二个 % 是转义,于是 %% 输出 %
sandtears
2014-10-11 10:54:48 +08:00
@pysama 对,就是转义符。。文档的话,我也不记得在哪学的了@_@
sandtears
2014-10-11 10:55:55 +08:00
@pysama 额我想起来了,其实这里和 C 语言很像,大多数情况参考 C 就行了
pysama
2014-10-11 11:06:12 +08:00
@hahastudio 召唤下haha大神 :)
limbo0
2014-10-11 11:17:45 +08:00
python里格式化字符串和C语言是一样的
hahastudio
2014-10-11 11:19:18 +08:00
@pysama ha?我怎么就成大神了= =

% 是旧世代的 string formatting 语法,可以在这里获得更多信息:
https://docs.python.org/2/library/stdtypes.html#string-formatting

顺带一提,Dive into Python 中提到,Python 使用 % 的语法与 C 的 sprintf 相同:
http://www.diveintopython.net/native_data_types/formatting_strings.html

新世代的 string formatting 语法是 {0} 这样的,可以在这里获得更多信息:
https://docs.python.org/2/library/string.html#format-string-syntax
pysama
2014-10-11 15:28:34 +08:00
@hahastudio 因为在python区看到你回复的内容都是有理有据的。所以非常佩服haha~

原来string formatting还有这么参数可以选择的。(之前只是看了A byte of python,所以没有深入了解),再次感谢haha

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/138172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX