Python精讲 | 超好用的f-string和Python3.12的新增特性

大家好,欢迎来到 Crossin的编程教室 !

上个月,Python发布了3.12版本,新增了一些特性,并且提升了效率。这个在之前文章中有提过:Python3.12发布,性能提升5%

9a366b5c5c6635fb49d1baa18aac3496.png

新增特性之一,就是扩展了f-string的语法。

今天我们就来展开讲讲这个f-string。

视频版:

什么是f-string?

它是python在3.6版本中新增的一种字符串格式化方法。语法是在字符串的引号前加上字母f,然后在字符串中通过大括号嵌入其他数值。

f'字字字{嵌入数值}字字字'

它相比于之前的%格式化和字符串format方法写起来更简洁,比如嵌入一个变量:

a095f5c53b87630a44cf0ee5b4cbce0d.jpeg

或者一个计算式:

6d616c9681a625b9e5a2dbc26c1b9387.jpeg

甚至是引用模块和调用函数:

4de4a4e66c04fd54568d736c087dbcfd.jpeg

基本上来说,就是你可以在字符串里面写python代码。

而且你还可以调整嵌入内容的格式,比如设定内容宽度、对齐方式、填充字符,小数的保留位数等,方法就是在后面加上冒号和格式说明符。

例如这个例子:

144e808c63c4a160ed1d7a5a1e4374ee.jpeg

这里设定嵌入内容的宽度为7个字符,不足的话用下划线(_)填充,上箭头(^)表示居中对齐。后面的.3f则表示保留小数点后3位有效数字。

通过格式说明符,还能让数值以不同的形式嵌入,对比下数字100分别以二进制、八进制、十六进制、百分比、科学计数法、以及ascii码对应字符的形式嵌入的效果:

62c35d33425b5e84ed34a9b4889d6b98.png

datetime格式的日期时间数据也可以用格式说明符来自定义输出格式:

742c39e9c0e2dda7c361bc476f6a9dcb.jpeg

而对于一个字符串,则可以通过!+修饰符在嵌入时转换为原始字符串或ascii码:

630549732fd74b0f74641d929b7e2a11.jpeg

之前视频中,有人注意到我在代码中写过这样一个输出语句:

0c86992e5db8d8a784d0f99efa1f6397.png

这也是f-string的一个功能,可以连同表达式文本一起输出。这是在python3.8版本才增加的新特性。

5ff3c7a835e7c3dd6419a9377e22c851.jpeg

注意看,表达式里的空格也会被体现在字符串中。

并且这里不仅可以是一个变量,也可以是一个计算式

d911eba64eccbd4acfd43957fca4e845.jpeg

以上是 f-string 的一些常用功能,关于更多的格式化参数可以查阅Python官方文档,有中文版,里面都写得很清楚,并且还给出了例子。

2.4.3. 格式字符串字面值

https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#formatted-string-literals

7.1.1. 格式化字符串字面值

https://docs.python.org/zh-cn/3/tutorial/inputoutput.html#formatted-string-literals

那这次3.12版本又加了什么新功能呢?

首先是可以重用引号。

我们都知道,Python的字符串内部不能含有定义字符串本身所用的引号。比如你字符串里要有单引号,那要么你用双引号来定义字符串,要么用反斜杠转义:

print('I'm Crossin')
print("I'm Crossin")
print('I\'m Crossin')

f-string内部大括号中的代码虽然并不算是字符,但之前也是要受这个限制的。在新版本中,这个限制被去掉了,你可以不必在单双引号之前来回切换:

afa66dea3e07f90d1e1352a79b081f23.jpeg

进而带来的一个好处就是,你可以无限地嵌套f-string,这在过去受限于引号冲突是做不到的。虽然我也不知道这样有什么用:

1c3e30bcefa8d306987c6364fa300c5b.jpeg

过去f-string大括号中的代码里不支持反斜杠转义字符,新版本也可以了:

650a0d1854c2f0552feacb2304b45dd4.jpeg

说到转义,你知道f-string里要怎么表示大括号字符吗?

就是用两个大括号:

4f2a0db0a106eeec516efa0149825f68.jpeg

在过去的版本中,如果你定义的f-string是单行字符串,那么大括号里面得表达式也必须写在一行内。现在这个限制也没了,只要符合语法就可以:

961437d30ac636c78ea19124469bf4ea.jpeg

而且还可以每行后面加上注释,这也是新增的功能:

fd74684a8a36f591336aaaf50f8e1867.jpeg

此外,新版本还做了个报错上的优化,提示信息更准确了:

844761c1c1e2092562394fcfb29a3216.png

f-string确实是一个非常好用的语法。自从用了它,我就再也不想写%了。

但我个人感觉3.12在f-string上的这波更新就属于锦上添花了,算不上很强烈的痛点。你觉得呢?欢迎在评论区讨论。或者有其他疑问和想了解的知识点,也可以在下方留言。

感谢转发点赞的各位~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crossin的编程教室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值