Python 字符串的格式化
admin
2023-07-31 00:44:27
0

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

format()

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

1234567891011 \”\”\”replacement_field ::=  \”{\” [field_name] [\”!\” conversion] [\”:\” format_spec] \”}\”field_name        ::=  arg_name (\”.\” attribute_name | \”[\” element_index \”]\”)*arg_name          ::=  [identifier | integer]attribute_name    ::=  identifierelement_index     ::=  integer | index_stringindex_string      ::=   +conversion        ::=  \”r\” | \”s\” | \”a\”format_spec       ::=  \”\”\”pass # Donot output

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

replacement_field.jpg

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

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

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

123456 print(\”{} {}\”.format(\”Hello\”, \”World\”))# is equal to…print(\”{0} {1}\”.format(\”Hello\”, \”World\”))print(\”{hello} {world}\”.format(hello=\”Hello\”, world=\”World\”)) print(\”{0}{1}{0}\”.format(\”H\”, \”e\”))

1234 Hello WorldHello WorldHello WorldHeH

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

12 print(\”{lang}.{suffix}\”.format(**{\”lang\”: \”Python\”, \”suffix\”: \”py\”}))print(\”{} {}\”.format(*[\”Python\”, \”Rocks\”]))

12 Python.pyPython Rocks

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

1234567 data = {\’name\’: \’Python\’, \’score\’: 100}print(\”Name: {0[name]}, Score: {0[score]}\”.format(data)) # 不需要引号 langs = [\”Python\”, \”Ruby\”]print(\”{0[0]} vs {0[1]}\”.format(langs)) print(\”n====nHelp(format):n {.__doc__}\”.format(str.format))

123456789 Name: Python, Score: 100Python vs Ruby ====Help΋体, Lato, \’Helvetica Neue\’, Helvetica, Arial, sans-serif;line-height: 1.5\”>的语法,PEP 3101 提出一种更先进的格式化方法 str.format() 并成为 Python 3 的标准用来替换旧的 %s 格式化语法,CPython 从 2.6 开始已经实现了这一方法(其它解释器未考证)。

format()

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

1234567891011 \”\”\”replacement_field ::=  \”{\” [field_name] [\”!\” conversion] [\”:\” format_spec] \”}\”field_name        ::=  arg_name (\”.\” attribute_name | \”[\” element_index \”]\”)*arg_name          ::=  [identifier | integer]attribute_name    ::=  identifierelement_index     ::=  integer | index_stringindex_string      ::=   +conversion        ::=  \”r\” | \”s\” | \”a\”format_spec       ::=  \”\”\”pass # Donot output

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

replacement_field.jpg

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

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

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

123456 print(\”{} {}\”.format(\”Hello\”, \”World\”))# is equal to…print(\”{0} {1}\”.format(\”Hello\”, \”World\”))print(\”{hello} {world}\”.format(hello=\”Hello\”, world=\”World\”)) print(\”{0}{1}{0}\”.format(\”H\”, \”e\”))

1234 Hello WorldHello WorldHello WorldHeH

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

12 print(\”{lang}.{suffix}\”.format(**{\”lang\”: \”Python\”, \”suffix\”: \”py\”}))print(\”{} {}\”.format(*[\”Python\”, \”Rocks\”]))

12 Python.pyPython Rocks

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

1234567 data = {\’name\’: \’Python\’, \’score\’: 100}print(\”Name: {0[name]}, Score: {0[score]}\”.format(data)) # 不需要引号 langs = [\”Python\”, \”Ruby\”]print(\”{0[0]} vs {0[1]}\”.format(langs)) print(\”n====nHelp(format):n {.__doc__}\”.format(str.format))

123456789 Name: Python, Score: 100Python vs Ruby ====Helpan>(format): S.format(*args,

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...