python 3:f字符串介绍


Python3.6增加了另一种进行字符串插值的方法,称为“f字符串”或格式化字符串文字(PEP 498)。f字符串背后的想法是使字符串插值变得更简单。要创建f字符串,您只需在字符串前面加上字母“f”。字符串本身的格式可以与使用str.format()的方式大致相同。换句话说,字符串中的替换字段可以用大括号括起来。下面是一个简单的示例:

>>> name = 'Mike'
>>> f"Hello {name}"
'Hello Mike'

Python文档中有一个有趣的示例,它演示了如何嵌套替换字段。不过,我对其进行了一些修改以使其更简单:

>>> total = 45.758
>>> width = 14
>>> precision = 4
>>> f"Your total is {total:{width}.{precision}}"
'Your total is          45.76'

在这里,我们创建了三个变量,第一个是浮点型,另外两个是整型。然后我们创建f字符串,并告诉它我们想要将TOTAL变量放入字符串中。但是您会注意到,在字符串的替换字段中,我们嵌套了宽度和精度变量来格式化总计本身。在本例中,我们告诉Python,我们希望总字段的宽度为14个字符,浮点数的精度为4,因此结果是45.76,您会注意到它是四舍五入的。

f字符串还支持日期格式设置:

>>> import datetime
>>> today = datetime.datetime.today()
>>> f"{today:%B %d, %Y}"
'March 13, 2018'

我个人喜欢PEP498中给出的示例,它实际展示了如何使用日期格式从日期中提取星期几:

>>> from datetime import datetime
>>> date = datetime(1992, 7, 4)
>>> f'{date} was on a {date:%A}'
'1992-07-04 00:00:00 was on a Saturday'

您还可以在f字符串中重复使用同一变量:

>>> spam = 'SPAM'
>>> f"Lovely {spam}! Wonderful {spam}!"
'Lovely SPAM! Wonderful SPAM!'

文档确实注意到,在嵌套引号时必须小心使用f字符串。例如,您显然不能这样做:

>>> value = 123
>>> f"Your value is "{value}""

这是一个语法错误,就像使用常规字符串时一样。您也不能在格式字符串中直接使用反斜杠:

>>> f"newline: {ord('\n')}"
Traceback (most recent call last):
  Python Shell, prompt 29, line 1
Syntax Error: f-string expression part cannot include a backslash: <string>, line 1, pos 0

但是,文档指出,作为解决办法,您可以将反斜杠放入变量中:

>>> newline = ord('\n')
>>> f"newline: {newline}"
'newline: 10'

在本例中,我们将换行符转换为其序数值。文档提到的最后一项是不能将f字符串用作文档字符串。根据Nick Coghlan的说法,这是因为文档字符串需要在编译时知道,但是f字符串直到运行时才被解析。

包扎

此时,您应该有足够的信息开始在您自己的代码中使用f字符串。这是对Python语言的一个有趣的补充,虽然不是绝对必要的,但我可以看到它在某些方面使字符串插值变得更简单。祝您编码愉快、愉快!

进一步阅读

https://docs.python.org/3/reference/lexical_analysis.html#f-strings