首页 > 编程语言 >Python3.12新增内容

Python3.12新增内容

时间:2023-12-24 15:44:07浏览次数:51  
标签:Python3.12 author self 新增 Person 内容 TypedDict print def

https://medium.com/techtofreedom/5-handy-python-3-12-new-features-that-improve-your-coding-experience-fe2d6e1f05b4

  • 类型系统,更方便的类型别名声明方式

简便的类型别名声明

我们可以直接如下定义类型别名

Point = tuple[float, float]

class PointTest:
	def __init__(self):
		self.point: Point = (0, 0)

在python12中,可以用type对这种别名进行表示和区分

type Point = tuple[float, float]

class PointTest:
	def __init__(self):
		self.point: Point = (0, 0)

TypedDict和Unpack的结合:更精准的**kwargs传参

Python38时引入了TypedDict,用于显示定义dict的键值类型。

from typing import TypedDict

class Person(TypedDict):
    name: str
    age: int

def get_author(author: Person):
    print(author)

author_data = {'name': 'Yang', 'age': 30, 'gender': 'male'}
get_author(author_data)

然而,若将参数中的author替换为**kwargs,程序就会报错。

from typing import TypedDict

class Person(TypedDict):
    name: str
    age: int

# def get_author(author: Person):
#     print(author)

def get_author(**kwargs: Person):
    print(author)

author_data = {'name': 'Yang', 'age': 30, 'gender': 'male'}
get_author(author_data)

因为,所有的参数就会被当做Person类型,而不是将所有参数当做一个Person的子类。

因此,python3.12提供了Unpack类型。

改进的F-String语法。

可以在F-String中的括号中直接使用双引号。

>>> print(f"This is the author: {"".join(["Y","a","n","g"])}")
This is the author: Yang

另外,还可以使用反斜杠了。

>>> print(f"This is the author:\n{"".join(["Y","a","n","g"])}")
Traceback (most recent call last):
  ...
  File "<input>", line 1
    print(f"This is the author:\n{"".join(["Y","a","n","g"])}")
                                            ^
SyntaxError: f-string: expecting '}'

now:

>>> print(f"This is the author:\n{"".join(["Y","a","n","g"])}")
This is the author:
Yang

提供Override装饰器,显示声明函数实现覆盖

from typing import override

class Animal:
	def speak(self) -> str:
		pass

class Dog(Animal):
	@override
	def speak(self) -> str:
		return 'woof'

	def walk(self) -> str:
		return 'walking'

my_dog: Dog = Dog()
print(my_dog.speak())
# woof
print(my_dog.walk())

报错信息能提供建议

当然,建议仅针对NameErrorImportErrorSyntaxError异常

标签:Python3.12,author,self,新增,Person,内容,TypedDict,print,def
From: https://www.cnblogs.com/ckxkexing/p/17924445.html

相关文章

  • Proxmox VE 超融合集群不停服务新增配置
    五个节点的ProxmoxVE超融合集群,创建了两个CephPool,一个是高速的Nvme存储池,另一个是大容量SATA存储池。现在需要将原有的SATA磁盘全部拔出来,换成高速Nvme磁盘。首先,先销毁由SATA机械盘组成的“hdd_pool”,选中它,然后点击按钮“销毁”。注意,必须先销毁CephPool,在销毁组成CephPool......
  • [问题记录] C# 使用NPOI操作Excel模版写入数据 - 生成文件打开时提示 "发现 XXX.xlsx
    解决方案:1.先确保原来的模版文件打开是正常的,没有提示要恢复2.用Office打开这个模版文件,另存为一个文件。用这个文件来作为模版使用。 问题描述:使用C#NPOI操作Excel模版(模版用office打开是正常的),写入数据,导出的文件打开时提示是否尝试恢复,点击“是”后,发现Excel内......
  • python批量给文本文件txt内容添加特殊符号等内容:-----------------------------------
    python脚本内容如下:#导入需要使用的模块importosimporttkinter.filedialogfn=tkinter.filedialog.askopenfilename(title='选择了一个文件',filetypes=[('文本文件','.txt'),('所有文件','.*')])print("打开了文件:"+fn)line_count=0f=open......
  • 技术写作与内容研究:主题得分、关键词搜索量、社区和论坛策略
    内容研究内容研究涉及对特定主题进行系统的调查,以收集可靠和相关的信息。这个过程对于技术作者来说至关重要,因为它有助于生成有价值的、准确的、信息丰富的和引人入胜的内容。它超越了基本的互联网搜索,包括阅读技术文档、采访专家、进行调查和分析数据。内容研究应以战略方式进行,......
  • 爬虫及js相关部分内容
    爬虫websocket直播弹幕抓取逆向分析流程总结websocket,flashchrome插件添加了有道生词本的chromegoogle翻译扩展和有道翻译扩展js提取authtaobao账号authweb自动化新浪账号自动化刷新headlesspuppeteer抓取微指数nodejs后端sequelizesequelize应用hook实现对分......
  • 技术写作与内容研究:主题得分、关键词搜索量、社区和论坛策略
    内容研究内容研究涉及对特定主题进行系统的调查,以收集可靠和相关的信息。这个过程对于技术作者来说至关重要,因为它有助于生成有价值的、准确的、信息丰富的和引人入胜的内容。它超越了基本的互联网搜索,包括阅读技术文档、采访专家、进行调查和分析数据。内容研究应以战略方式进行......
  • 【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持多笔记同时采集!
    一、背景介绍1.1爬取目标您好!我是@马哥python说,一名10年程序猿。我用python开发了一个爬虫采集软件,可自动按笔记链接抓取笔记的详情数据。为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!软件界面截图:爬取结果截图:结......
  • thread基本常识内容汇总
    1.pthread_setschedparamman手册-来自Ubuntu20.04PTHREAD_SETSCHEDPARAM(3)LinuxProgrammer'sManual......
  • 【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持多笔记同时采集!
    目录一、背景介绍1.1爬取目标1.2演示视频1.3软件说明二、代码讲解2.1爬虫采集模块2.2软件界面模块2.3日志模块三、获取源码及软件一、背景介绍1.1爬取目标您好!我是@马哥python说,一名10年程序猿。我用python开发了一个爬虫采集软件,可自动按笔记链接抓取笔记的详情数据。......
  • C#替换Word中的文本内容(亲测)
    1   Word文档文本替换时长度不能超过255个字符,不能一次性替换,本方法通过循环替换,达到替换超过255字符的目的。///<summary>///替换word中的文字///</summary>///<paramname="filePath">文件的路径</param>///<paramname="datas">包含待替换字符串和替换字符串的......