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

news2024/11/15 12:01:57

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

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

3b6195af84e2be1a40f5f3a2292a6e8b.png

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

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

视频版:

什么是f-string?

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

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

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

cc9bd041e12351f81f88f8b27fc18806.jpeg

或者一个计算式:

617da1c77aaa0984f3322c7225c86ffd.jpeg

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

6fc0eae35e5cdb321cde0e2dca6c9d35.jpeg

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

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

例如这个例子:

959269150f2f205bfeefaa08a4a26c7f.jpeg

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

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

fe78a71fa1b54ddcb3bcda526b55e8f5.png

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

7f1eeb4678b51e6533342b185f62e852.jpeg

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

485f1d81ad8554613aab16d5496098e1.jpeg

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

10f857f4caeef584da06d806d2bc6b2e.png

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

154f367ee43e8d2ae53b5e21d6b99e88.jpeg

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

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

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

46d1a5e16d56c54962c850757fdc8f67.jpeg

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

8b221174d769c0f52c8f7982f94ec619.jpeg

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

bc4a7fe2f040236573efb8ec16750511.jpeg

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

就是用两个大括号:

1fbc396d95f48c439e7b90079f5e0fd7.jpeg

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

09b9e39dfcda15ea1b26c24548ade11f.jpeg

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

4b7763376c9293804a9d13a22884fe0e.jpeg

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

f10b43b32c80a1324e6102bd6a5590c0.png

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

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

感谢转发点赞的各位~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教3妹学编程-算法题】最大异或乘积

3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定” 2哥 : 啥?18岁就当爹啦? 3妹:确切的说是14岁好吧。 2哥 : 哎,想我30了, 还是个单身狗。 3妹:别急啊, 2…

代码随想录第六十三天 | 单调栈:寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标(暴力,双指针,单调栈)(84);代码随想录主要题目结束

1、寻找 左边 / 右边 距离当前元素最近的 更小 元素的 下标 1.1 leetcode 84:柱状图中最大的矩形 第一遍代码思路错了,如:输入[2,1,2],对于2,因为比栈顶元素1大,然后就会直接得出2(1&#xff…

wincc定时器功能介绍

1定时器功能介绍 WinCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下&#xff0c…

python plot绘图

使用python绘制t-sne图,并保存 一下是一个将que_im_features向量可视化的例子: def emb_save(que_im_features,i):# 向量[75, 640, 11, 11], episodeimport numpy as npimport pandas as pdfrom sklearn import manifoldimport matplotlib.pyplot as p…

西门子S7-200SMART常见通讯问题解答

1台200SMART 如何控制2台步进电机? S7-200SMART CPU最多可输出3路高速脉冲(除ST20外),这意味着可同时控制最多3个步进电机,通过运动向导可配置相应的运动控制子程序,然后通过调用子程序编程可实现对步进电…

SpringCloud 微服务全栈体系(十六)

第十一章 分布式搜索引擎 elasticsearch 六、DSL 查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1. DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查询。常见的查询类型包括&#xff1…

Mybatis和MybatisPlus:数据库操作工具的对比

目录 什么是mybatis 什么是mybatisplus MyBatis-Plus:为简化数据库操作而生的强大工具 一、MyBatis-Plus的背景和概述 二、MyBatis-Plus的主要特点 三、如何使用MyBatis-Plus mybatis-Plus的优势 什么是Hibernate Hibernate:Java开发者的数据持久…

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鹰栖息优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

vue3的单组件的编写(二)--通过对比vue2来讲解

🐯 单组件的编写(二) 主要讲了 🌈 响应式数据的变化 响应式数据是MVVM数据变驱动编程的特色, VUE的设计也是受 MVVM模型的启发,大部分开发者选择MVVM框架都是因为数据驱动编程比传统的事件驱动编程来的方便。而选择vue&#xff…

maven打包项目,然后给其他项目引用

A项目(这个项目需要被打包,作为被引入的项目),不需要启动类,因为作为公共模块被B项目引入: package com.yunya.mvndependontest.rest;import org.springframework.web.bind.annotation.RequestMapping; im…

git分支命名规范

https://www.cnblogs.com/wq-9/p/16968098.html

绝地求生:想玩以前的老地图

小编是22年8月左右开始玩的,更早以前跟同学偶尔玩过几次,所以萨诺2.0玩过,不过那时候菜的还不如人机,死了都看不到人在哪,所以对地图没啥印象,比较有印象的是地图色调变得很黄昏。 自闭城 遗迹 这是迪厅&am…

智能座舱架构与芯片- (5) 硬件篇 下

四、短距无线连接 随着汽车智能化的发展与新型电子电气架构的演进,传统车内有线通信技术存在着诸多痛点: 线束长度增加:由于智能化与自动化的发展,车内传感器和执行器均大幅增加。采用有线技术连接,则线束长度&#…

【带你读懂数据手册】CN3702 一款锂电池充电芯片

大家在学习智能车或者飞行器的时候,是不是外接一个电池?最近刚好学习了一款充电芯片,来和大家分享一下,也算是我的一点点笔记。 一款7.4V锂电池,基本上也满足了单片机的外设,如果需要12V或者24V的电压&…

微信收款助手消息不弹窗的解决办法

最近在做微信个人收款的回调,主要方法是根据通知栏截取收款信息,然后进行回调。 其中,发现一个问题,就是微信版本某次升级后,发现微信收款时不弹出消息了。 于是找到了这个解决方法,遇到相同问题的同学们…

(01)vite 从启动服务器开始

文章目录 前言在浏览器中使用es模块初始化环境vite依赖预构建解决了什么问题创建vite.config.js配置vite为什么vite.config.js可以用esmodule规范 前言 Vite(发音为"veet")是一种现代化的前端构建工具,旨在提供快速的开发体验。它…

【攻防世界-misc】simple_transfer

1.下载并打开文件, 2.这个文件是一个pcap文件, 用wireshark打开,并按上图步骤操作, 会自动定位到有flag的这个信息行,这时需要右键追踪该信息的tcp流即可。 向下查找时,可以看到有一个pdf文件在这个里面&…

【Linux】Linux中的基本概念

Linux中的基本概念 1. 路径分隔符/2. 当前目录 .3. 返回上级目录 . .目录结构:多叉树 4. 路径5. 路径 { 绝对路径 相对路径 }6. * 通配符 指定路径下的所有文件7. 同级目录下,不允许存在同名文件,或者同名目录8. 命令的本质就是可执行文件9…

四川芸鹰蓬飞:抖店运营的时候注意什么?

抖店作为一个短视频平台,吸引了越来越多的商家加入。在抖店上进行有效的运营是提高销量和曝光度的关键。那么,抖店怎么设置运营呢?有哪些方法可以帮助商家在这个竞争激烈的平台上脱颖而出呢? 一、抖店怎么设置运营? 首…