Python 字符串的格式化

相信很多人在格式化字符串的时候都用"%s" % v的语法,PEP 3101 提出一种更先进的格式化方法 str.format() 并成为 Python 3 的标准用来替换旧的 %s 格式化语法,CPython 从 2.6 开始已经实现了这一方法(其它解释器未考证)。

format()

新的 format() 方法其实更像是一个简略版的模板引起(Template Engine),功能非常丰富,官方文档对其语法的描述如下:

我将其准换成铁路图的形式,(可能)更直观一些:

replacement_field.jpg

模板中替换变量用 {} 包围,且由 : 分为两部分,其中后半部分 format_spec 在后面会单独讨论。前半部分有三种用法:

  1. 代表位置的数字
  2. 代表keyword的标识符

这与函数调用的参数类别是一致的:

除此之外,就像在0x05 函数参数与解包中提到的一样,format() 中也可以直接使用解包操作:

在模板中还可以通过 .identifier[key] 的方式获取变量内的属性或值(需要注意的是 "{}{}" 相当于 "{0}{1}"):

强制转换

可以通过 ! + r|s|a 的方式对替换的变量进行强制转换:

  1. "{!r}" 对变量调用 repr()
  2. "{!s}" 对变量调用 str()
  3. "{!a}" 对变量调用 ascii()

格式

最后 : 之后的部分定义输出的样式:

format_spec.jpg

align 代表对齐方向,通常要配合 width 使用,而 fill 则是填充的字符(默认为空白):

同时可以看出,样式设置里面可以嵌套 {} ,但是必须通过 keyword 指定,且只能嵌套一层。

接下来是符号样式:+|-|' ' 分别指定数字是否需要强制符号(其中空格是指在正数的时候不显示 + 但保留一位空格):

# 用于表示特殊格式的数字(二进制、十六进制等)是否需要前缀符号;, 也是用于表示数字时是否需要在千位处进行分隔;0 相当于前面的 {:0=} 右对齐并用 0 补充空位:

最后两个就是我们熟悉的小数点精度 .n 和格式化类型了,这里仅给出一些示例,详细内容可以查阅文档

Integer

Float

String (default)

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

3 6 收藏 评论

关于作者:Yusheng

关注微信公众号 PyHub! 个人主页 · 我的文章 · 24 ·   

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部