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

目录

概述 

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.mzph.cn/news/579359.shtml

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

相关文章

KPM算法快速检索文本

说到检索文本java的String.indexOf,方法其实已经性能很不错了,contains方法其实也是调用了indexOf方法,所以一般情况下使用contains方法也是完全够用的,简单了解了一下indexOf的原理 String.indexOf 在 Java 1.8 中,String 类的 indexOf 方法主要使用的是经过优化…

windows+ubuntu离线安装翻译软件有道词典

背景: 某些情况下,需要在无法连接互联网的电脑上翻译单词,句子以及段落,就需要能离线安装和翻译的翻译软件,具备一定的词库量,目前找到了《有道词典》。 windows 亲测,无法联网的win10中安装…

【vim编辑器的使用】

文章目录 一. Linux软件包管理器yum二. Linux开发工具vim编辑器的使用。三. vim命令模式命令集和底行模式命令集。四底行模式命令集 五. 结束语 一. Linux软件包管理器yum 什么是软件包? 1. 在Linux下安装软件,一个通常的办法是直接下载程序的源代码&am…

OpenAI GPT 模型 API 接口新增参数 top_logprobs 和 logprobs

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 在最新的 OpenAI 官方 APIs 文档中,Create chat completion 中新增了 top_logprobs 和 logprobs 这两个关键参数。 官方文档地址&#xff…

黑马程序员SSM框架-Spring

视频链接:Spring-00-Spring课程介绍_哔哩哔哩_bilibili Spring Framework系统架构以及学习顺序 核心概念(IoC、DI、Bean) IoC入门案例 导入坐标 提供需要被管理的类(Dao)和需要被注入的类(Service&#x…

接口测试之dubbo篇

Dubbo 是一款高性能、轻量级、基于 Java 的开源 RPC 框架(最早由阿里开源, 2018 年贡献给了 Apache 组织) Dubbo 接口的作用:远程调用 java 写的方法。 需要传参、获取返回值。 telnet 远程连接服务 连接语法: tel…

限制el-upload组件的上传文件大小

限制el-upload组件的上传文件大小 <el-upload :before-upload"handleBeforeUpload"><!-- 其他组件内容 --> </el-upload>Vue实例中定义handleBeforeUpload方法来进行文件大小的验证。你可以使用file.size属性来获取文件的大小&#xff0c;并与你期…

netcore 上传文件到阿里云OSS问题

AliYunOSSHelper类&#xff1a; namespace VOL.WebApi {public class AliYunOSSHelper: IScopedDependency{private ILogger _logger;/// <summary>/// 阿里云帮助类/// </summary>/// <param name"logger"></param>/// <param name&quo…

windows安全配置实验手册

访问控制策略&#xff08;L1940520022J&#xff09; 预备知识 Windows 7中&#xff0c;不仅有面向软件的限制方法&#xff0c;还增加了一种名为AppLocker的访问控制策略&#xff08;仅适用于企业版和旗舰版&#xff09;。 实验环境 操作系统类型&#xff1a;windows 7。 实…

Elasticsearch之常用DSL语句

目录 1. Elasticsearch之常用DSL语句 1.1 操作索引 1.2 文档操作 1.3 DSL查询 1.4 搜索结果处理 1.5 数据聚合 1. Elasticsearch之常用DSL语句 1.1 操作索引 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; - type&#xff1a;字段数据类…

【华为OD机试真题2023CD卷 JAVAJS】5G网络建设

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 5G网络建设 时间限制:4s 空间限制:256MB 限定语言:不限 题目描述: 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站,编号固定为1到N,接下来需要各个基站之间使用光纤进行连接以确保基站能互联互通,不同…

前端性能优化三十:花裤衩模板多线程执行优化

(1). 痛点: ①. webpack构建过程中的有两个部分是直接影响构建效率:a. 文件的编译(更为耗时).b. 文件的分类打包.②. js是单线程模型:a. Node环境下文件只能一个一个去处理,webpack执行预处理文件时单线程的.③. 在webpack构建过程中:a. 需要使用Loader对js、css、图片、字体等…

二叉树OJ题——4.相同的树

100. 相同的树 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 首先比较根节点是否相同&#xff0c;然后分别比较左右子树是否相同。 */bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if(pNULL&&qNULL){return true;}if(pNULL||qNULL)…

利用html2Canvas将表格下载为html

给到我的需求是点击按钮时请求后端接口&#xff0c;根据后端返回的数据&#xff0c;生成表格,并将表格的内容直接下载为html,如下图。 平常做的下载都是后端返回二进制流&#xff0c;这次前端做下载那就必须把页面先画出来&#xff0c;因为下载下来的表格在页面上是不显示的&a…

直接插入排序和希尔排序

文章目录 前言概述直接插入排序本质分析代码总结 希尔排序一组一组排序多组同时进行完整的代码 总结 前言 排序&#xff1a; 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; …

浅谈Java反射中的getFields()方法和getDeclaredFields ()方法

目录 1. 概念2. getFields()方法2. getDeclaredFields()方法4. 总结 1. 概念 反射是Java中一种强大的机制&#xff0c;允许在运行时获取、检查和操作类、方法、字段等信息&#xff0c;而不需要在编译时知道这些信息。 其中字段&#xff08;Field&#xff09;在Java中是类中用…

C++ 中使用 std::map 的一个示例

std::map 是一个容器&#xff0c;可以用来存储键值对&#xff0c;其中键是唯一的&#xff0c;每个键都映射到一个值 #include <iostream> #include <map>int main() {// 声明了一个 std::map<std::string, int> 类型的变量 myMap&#xff0c;它可以将字符串…

Unity向Web服务器上传和下载图片

Unity向Web服务器上传和下载图片 如果本片有看不懂的请查看我上篇文章&#xff1a;[Unity与Web服务器Post&#xff0c;Get](https://blog.csdn.net/qq_42194657/article/details/103031573)一、上传和下载图片1.在Unity中创建一个RawImage并在WebManager.cs脚本中添加一个Textu…

❀My排序算法学习之插入排序❀

目录 插入排序(Insertion Sort):) 一、定义 二、基本思想 三、示例 时间复杂度 空间复杂度 bash C++

java:4-12第4章作业

计算下列表达式的结果 10/3310/5210%20-10.5%33&#xff1a; 【a%b当a是小数时&#xff0c; 公式a- (int)a /bb -10.5%3 -10.5 - (-10)/33 -10.59-1.5 注意&#xff1a;小数参与运算时&#xff0c;结果都是近似值】 试说出下面代码的结果 int i66; System.out.println(i i)…