Python3.12 新版本之f-string的几个新特性

news2025/2/3 15:59:11

目录

概述 

f-string表达式

1. 支持转义字符

2. 支持多行字符串

3. 支持重复使用的引号种类

4. 支持无限嵌套

附录

Python3.12新语法特性


概述 

Python 3.12在10月2日发布,新版本包含一系列对语言和标准库的改变。 库的改变主要集中在清理已弃用的 API、可用性和正确性等方面。 值得注意的是,distutils 包已从标准库中移除。 os 和 pathlib 中的文件系统支持增加了许多改进,而且部分模块的性能也获得了提升。语言的改变主要集中在可用性方面,如 f-字符串 的许多限制已被移除,并且改进错误信息的提示,使开发者能更好地理解错误发生的原因;新的类型形参语法 和 type 语句提升了 泛型类型 和 类型别名 配合静态类型检查器使用时的效率。另外还有其他一系列的性能改进,开发团队称其性能整体提升了5%。以下对其中的f-string解析的新特性作些简单分享:

f-string表达式

1. 支持转义字符

老版本中f-string原本不能包含任何反斜杠符号“\”和Unicode转义,新版本允许使用。但特殊的大括号的转义用双写: {{ 和 }}。例如:

print(f"Hello\n{{H\na\nn\nn}}") 

Hello
{H
a
n
n}

2. 支持多行字符串

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

x,y=1,2
print(f"""{x}.This is a
multiline f-string.
{y}.It can contain any text.
另外:表达式可以换行书写:{x+
y**3}
""")

输出:

1.This is a  
multiline f-string.
2.It can contain any text. 
另外:表达式可以换行书写:9

3. 支持重复使用的引号种类

新版本中可以在表达式里重复使用f-string使用过的引号种类,不用像老版本中只能在双引里放单引号,单引号里放双引呈。例如:

print(f"重复相同的引号: {"+".join(["1","2","3"])}")

输出:

重复相同的引号: 1+2+3 

4. 支持无限嵌套

在新版本中,用户可以无限地嵌套f-string,这在过去受限于引号冲突是无法做到的,这是特性3引申出来的功能。例如:

name = "Hann"  
print(f"Hello, {f"Hello, {name}!"}!") 
print(f"{f"{f"{f"{f"{f"{name+str(2023.12)}"}"}"}"}"}")

输出:

Hello, Hello, Hann!
Hann2023.12


再举一个稍微复杂一点的例子:

name = "Hann"
age = 50
city = "KunShann"
address = f"123 Main St, {city}"
template = f"""  
Hello, {name}! \nYou are {age} years old.  
Your address is {address}.  
"""
print(template)

输出: 

Hello, Hann! 
You are 50 years old.  
Your address is 123 Main St, KunShann. 


附录

Python3.12新语法特性

PEP 695,类型形参语法和 type 语句

新的语法特性:

PEP 701,f-字符串 语法的改进

解释器的改进:

PEP 684,解释器级的单独 GIL

PEP 669,低开销的监控

针对 NameError, ImportError 和 SyntaxError 异常 改进了 'Did you mean ...' 提示消息。

对 Python 数据模型的改进:

PEP 688,使用 Python 的 缓冲区协议

标准库中的重大改进:

pathlib.Path 类现在支持子类化

os 模块获得了多项针对 Windows 支持的改进

在 sqlite3 模块中添加了 命令行界面。

基于 运行时可检测协议 的 isinstance() 检测获得了 2 至 20 倍的提速

asyncio 包的性能获得了多项改进,一些基准测试显示有 75% 的提速。

在 uuid 模块中添加了 命令行界面。

由于 PEP 701 中的更改,通过 tokenize 模块生成令牌(token)的速度最多可提高 64%。

安全改进:

用来自 HACL* 项目的经过正式验证的代码替代 SHA1, SHA3, SHA2-384, SHA2-512 和 MD5 的内置 hashlib 实现。 这些内置实现保留作为仅在当 OpenSSL 未提供它们时使用的回退选项。

C API 的改进:

PEP 697,不稳定 C API 层

PEP 683,永生对象

CPython 实现的改进:

PEP 709,推导式内联化

对 Linux perf 性能分析器的 CPython 支持

在受支持的平台上实现栈溢出保护

新的类型标注特性:

PEP 692,使用 TypedDict 来标注 **kwargs

PEP 698,typing.override() 装饰器

重要的弃用、移除或限制:

PEP 623: 在 Python 的 C API 中移除 Unicode 对象中的 wstr,使每个 str 对象的大小缩减至少 8 个字节。

PEP 632: 移除 distutils 包。 请参阅 迁移指南 了解有关替换其所提供的 API 的建议。 第三方 Setuptools 包将继续提供 distutils,如果你在 Python 3.12 及更高版本中仍然需要它的话。

gh-95299: 不在使用 venv 创建的虚拟环境中预装 setuptools。 这意味着 distutils、setuptools、pkg_resources 和 easy_install 默认将不再可用;要访问这些工具请在 激活的 虚拟环境中运行 pip install setuptools。

移除了 asynchat、asyncore 和 imp 模块,以及一些 unittest.TestCase 方法别名。

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

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

相关文章

cJSON简析

文章目录 json概要cJSON数据结构 递归解析示例references json概要 json是一种文本格式的协议 对于人的可阅读性非常好 其中object和array中的value都可以嵌套 cJSON数据结构 每个节点的数据结构如下 /* cJSON Types: */ #define cJSON_Invalid (0) #define cJSON_False (…

智能监测/检测系统EasyCVR国标接入无法播放是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

减小PAPR——DFT扩频

文章目录 前言一、DFT 扩频原理二、MATLAB 仿真1、核心代码2、仿真结果①、4QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PAPR 性能②、16QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PAPR 性能③、64QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PA…

Javaweb见解

1 web相关的概念 1.1 软件的基本架构 C/S(Client-Server)。比如我们手机上的app QQ软件 飞秋 特点:必须下载特定的客户端程序。服务端升级之后,客户端也需要随着升级。 B/S(Broswer-Server).比如京东网站,腾讯qq官方网站 特点&#xff1…

AR眼镜定制_AR智能硬件方案|显示方案|光学方案

AR眼镜的硬件方案定制是根据客户需求和功能来设计的。从芯片平台选型、主板尺寸大小、内存、电池容量,到实现各项功能的传感器、显示光机模组、摄像头、接口、按键、充电等,再到整机的结构、散热设计,以及双目AR眼镜、单目智能眼镜、全息头盔…

【教学类-42-03】20231225 X-Y 之间加法题判断题3.0(确保错误题有绝对错误的答案)

背景需求: 根据需求,0-5以内的判断是21题正确,21题错误,但由于错误答案是随机数抽取,有可能恰好是正确的,所以会出现每套题目的正确数和错误数不一样的情况 优化思路一: 设置如果错误答案与正…

TypeScript学习(基础篇)

前言 在现代的Web开发生态系统中,JavaScript已经成为一种必备的技术。然而,随着应用的增大,JavaScript的一些限制开始显现,例如缺乏静态类型检查和编译时错误检查。这正是TypeScript发挥作用的地方,TypeScript是一种静…

软件测试自学还是报班好?

如果你学软件测试,是以就业为目的,而且是以高薪就业为目的,那我们就要去反推,为了这个目标,我们要去做什么事情。 为了“将高薪就业为目的,我们要做什么事情”阐述清楚,本文行文结构如下&#x…

接口测试及常用接口测试工具(postman/jmeter)附教程

首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给…

Netty—Reactor线程模型详解

文章目录 前言线程模型基本介绍线程模型分类Reactor线程模型介绍Netty线程模型: 传统阻塞IO的缺点Reactor线程模型单Reactor单线程模式单Reactor多线程模式主从Reactor多线程Reactor 模式小结 Netty 线程模型案例说明:Netty核心组件简介ChannelPipeline与…

条件覆盖和条件组合覆盖测试设计-实验八例题

目录 条件覆盖 判定-条件覆盖 条件组合覆盖 实验内容: 以银行内部转账为实例,针对内部转账业务逻辑代码进行分析,运用条件覆盖和条件组合覆盖进行测试用例设计。 实验过程: 条件覆盖 条件覆盖(Condition Cover…

官宣定了!2024年举办4次PMP认证考试,每个季度一次

就在刚刚,2023年12月26日14:05分,PMI和中国国际人才交流基金会通过官微,联合发布了2024年PMI认证考试计划的通知,正式宣告了2024年的PMP考试初步安排。 这个通知发布之后,有一些伙伴问华研荟一些细节问题,…

挑战Python100题(6)

100+ Python challenging programming exercises 6 Question 51 Define a class named American and its subclass NewYorker. Hints: Use class Subclass(ParentClass) to define a subclass. 定义一个名为American的类及其子类NewYorker。 提示:使用class Subclass(Paren…

vue-awesome-swiper轮播组件

安装版本&#xff1a;"swiper": "^6.0.0", 安装版本&#xff1a;"vue-awesome-swiper": "^4.1.1", <div class"swiper_conter"><swiper class"swiper" :options"swiperOption" ref"mySw…

怎么实现Servlet的自动加载

在实际开发时&#xff0c;有时候会希望某些Servlet程序可以在Tomcat启动时随即启动。但在默认情况下&#xff0c;第一次访问servlet的时候&#xff0c;才创建servlet对象。 如果servlet构造函数里面的代码或者init方法里面的代码比较多&#xff0c;就会导致用户第一次访问serv…

浅谈能效管理平台在污水处理厂中的应用

摘要&#xff1a;《“十四五”城镇污水处理及资源化利用发展规划》指出&#xff0c;2021—2025 年合理减缓我国城镇污水收集处理设施发展不平衡不充分的矛盾&#xff0c;系统推动补短板强弱项&#xff0c;全方面提升污水收集处理效能&#xff0c;加速推进污水资源化利用&#x…

溴乙腈,2028年将以4.5%左右的复合年增长率增长

溴乙腈是一种化合物&#xff0c;主要用作合成各种药物、农用化学品和其他特种化学品的中间体。近年来&#xff0c;受医疗保健、农业和化学制造等各种最终用途行业对溴乙腈的需求不断增加的推动&#xff0c;全球溴乙腈市场一直在稳步增长。全球市场分析&#xff1a; 在制药和农业…

【Unity地形】使用地形工具创建场景环境-Terrain

如上图Unity的地形工具可以让我们实现创建复杂、丰富的3D室外环境。 我们创建地形很简单&#xff0c;在层级面板中右键-3Dobject-Terrain 就可以创建一个默认的地形模型&#xff01;这个模型是Unity内置的。 接下来的地形编辑功能全部集中在这个地形的组件上 主要功能如下&…

怎么修复MSVCR110.dll文件?全面解析MSVCR110.dll缺失修复方法

MSVCR110.dll文件缺失问题在Windows操作系统用户中相当普遍&#xff0c;经常导致应用程序启动失败或崩溃。MSVCR110.dll是Microsoft Visual C Redistributable for Visual Studio 2012的一部分&#xff0c;且应用程序通常依赖这个DLL文件来执行C库中的代码。文件的丢失可能源自…

Rabbit加密算法

一、引言 随着信息技术的快速发展&#xff0c;数据安全已成为越来越受到重视的领域。加密算法作为保障数据安全的重要技术手段&#xff0c;在通信、存储等领域得到了广泛应用。Rabbit加密算法作为一种新型的加密算法&#xff0c;凭借其简单易懂的原理、高速的运算性能以及良好…