Python 3.10是Python的最新版本,它提供了一些新功能和改进,以满足现代编程需求。
首先,Python 3.10引入了一个新的语法特性——“Walrus Operator”(:=)。它可以在表达式中分配值,而不必使用临时变量。这使得代码更加简洁易读。例如:
if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
此外,Python 3.10还增加了对字符串标记的支持。字符串标记是一种特殊的字符串表达式,可以用来创建复杂的字符串样式。例如:
name = "John" print(f"""Hello {name}! Welcome to the party!""")
此外,Python 3.10还增加了对数字标量单位的支持。数字标量单位允许在数字中使用单位后缀来表明数字的大小或单位。例如:
x = 8_000_000 # 8 million in "underscore" notation y = 8e6 # 8 million in scientific notation z = 8M # 8 million in unit suffix notation
此外,Python 3.10还增加了对新的内部函数、文件处理函数、时间函数、内部API、内部工具、内部库函数以及其他一些新特性的支持。所有这些特性都将有助于使Python成为一门强大而实用的语言。
python3.10版本于2021年10月4日发布正式版,该版本带来了七大新特性。为了让大家对新版本有更好的认识,接下来的介绍会尽量添加python3.10版本和旧版本的代码进行对比。
带*号的为比较重要的特性。
Python3.10版本中,联合运算符使用“|”线来代替了旧版本中的Union[]方法,使得程序更加简洁,不仅如此,Python3.10在一些内置函数中,同样可以利用“|”线的联合运算符来提升程序的性能。
在函数中:
from typing import Union # 使用Union需要引入对应的包
# 旧版本
def oldFunc(para: Union[int, float]) -> Union[int, float]:
return para ** 2
# 新版本
def newFunc(para: int | float) -> int | float:
return para ** 2
print(newFunc(3))
在内置函数中使用联合运算符:
# 旧版本
print(isinstance("", (str, int)))
# 新版本
print(isinstance("", str | int))
python3.10 中,with 支持使用外层圆括号来使用多个上下文管理器,可以连续多行地书写。这允许将过长的上下文管理器集能够以与之前 import 语句类似的方式格式化为多行的形式。例如,以下这些示例写法现在都是有效的:
with (CtxManager() as example):
pass
with (CtxManager1(),
CtxManager2()):
pass
with (CtxManager1() as example,
CtxManager2()):
pass
with (CtxManager1(),
CtxManager2() as example):
pass
with (CtxManager1() as example1,
CtxManager2() as example2
):
pass
Python 3.10 引入了结构化的模式匹配,通过match...case关键词来完成,可以匹配字典,类以及其他更复杂的结构。match...case的模式匹配,在使用的方式上与C++中的switch有很多的相似之处。
下面的函数中,case函数通过匹配grade,如果grade为"A",则匹配到第一个例子,如果grade为"B",则匹配到第二个例子...如果前面的案例都不满足时,则输出最后的默认结果。
grade = "B"
match grade: # 看grade变量,并与下面的case做对比(类似其他语言的switch
case "A": # 如果grade为"A",则执行该代码块
print("很棒")
case "B": # 如果grade为"B",则执行该代码块
print("做得好")
case "C": # 如果grade为"C",则执行该代码块
print("您通过了")
case "D":
print("最好再试一下")
case _: # 如果上面的所有case都未命中,则执行该代码块(类似于其他语言的default)
print("无效的成绩")
在Python3.10中,针对于字典的三个方法,items,keys和values都增加了一个新的“mapping”属性,通过上述的程序可以发现,对三个方法调用mapping属性后都会返回原字典数据。
mydict = {"": 1, "baidu": 2, "Google": 3}
# 旧版本
print(mydict.keys())
print(mydict.values())
print(mydict.items())
# 新版本
keys = mydict.keys()
values = mydict.values()
items = mydict.items()
print(keys.mapping)
print(values.mapping)
print(items.mapping)
# 可以理解为我们可以根据字典的keys,values,items反向推出这个字典
函数 zip() 增加 strict 参数
Python3.10中对于zip函数添加了strict参数,顾名思义,strict参数就是要严格的遵守参数长度的匹配原则,下面程序中,keys和values列表的长度并不一致。
旧版本的zip函数会根据长度最短的参数来创建字典。新版本的zip函数中,当设定strict参数设置为True时,则要求zip的输入参数必须要长度一致,否则就会报错。
keys = ["", "Baidu", "Google"]
values = [1,2,3,4]
#旧版本
try:
print(dict(zip(keys,values)))
except:
print("字典创建失败")
try:
print(dict(zip(keys, values, strict=True)))
# 增加strict参数后,如果两个列表长度不等,创建的时候会报错
except:
print("字典创建失败")#报错后使用try-except语句捕获
在Python3.10版本中,可以通过调用bit_count函数来统计二进制中数字“1”的个数,当然,在旧版本中,也可以通过很简单的代码实现这个功能。
value = 5
#旧版本
print(bin(value).count("1"))
#新版本
print(value.bit_count())
在旧版本中,可以直接通过不同类型的赋值操作来赋予类型新的名字,而在Python3.10版本中,则通过TypeAlias来规定了类型名字的替换。这样操作的优势在于能够让程序开发人员和Python编辑器更加清楚的知道newname是一个变量名还是一个类型的别名,提升程序开发的可靠性。
from typing import TypeAlias # 使用TypeAlias需要导入相关的包
#旧版本
oldname = str
def oldFunc(paran:olaname)->oldname:
return param+param
#新版本
newname:TypeAlias = str
def newFunc(param:newname)->newname:
return param+param
print(newFunc(""))
由于Distutils库的功能已经被此setuptools和package库取代了,所以本着简洁性的原则,Distutils在不久的将来(3.12版本)将会被完全的删除掉。
Distutils包为将待构建和安装的额外的模块,打包成 Python 安装包提供支持。新模块既可以是百分百的纯 Python,也可以是用 C 写的扩展模块,或者可以是一组包含了同时用 Python 和 C 编码的 Python 包。
大多数 Python 用户 不会 想要直接使用这个包,而是使用 Python 包官方维护的跨版本工具。特别地, setuptools 是一个对于 distutils 的增强选项,它能提供:
- 对声明项目依赖的支持
- 额外的用于配置哪些文件包含在源代码发布中的机制(包括与版本控制系统集成需要的插件)
- 生成项目“进入点”的能力,进入点可用作应用插件系统的基础
- 自动在安装时间生成 Windows 命令行可执行文件的能力,而不是需要预编译它们
- 跨所有受支持的 Python 版本上的一致的表现
在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化Pytho...
集合(set)是一个无序的不重复元素序列。因此在每次运行的时候集合的运行结果的内容都是相同的,但元素的排列顺序却不是固定的...
Python3 实例以下实例为学习Python的第一个实例,即如何输出"Hello World!":# -*- coding: UTF-8 -*-# Filename : helloworld.p...
Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累...