网站首页 > 技术文章 正文
最近Python 更新频率相当高。
10月4日刚发布第一个Python 3.10 正式版,紧接着3天后,马上又发布了3.11 的第一个阿尔法测试版。
来源:Python.org
对于开发者来说,Python 3.10 也确实带来了一些有趣的变化。
Python 3.10 主要带来了3个功能上的新特性。
01 结构模式匹配
结构模式匹配,也就是选择功能。
如果你有过类似于C++ 和Java 语言的开发经验,就会发现,其他语言中很好用的switch case 语法,在以往的Python 版本中是不存在的。
如果需要多条件选择的功能,则是使用if elif 语法代替:
if num == 1: # 判断num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 3:
print 'worker'
else:
print 'roadman' # 条件均不成立时输出
虽然这样的语法并不难用,但Python 3.10 给了我们更好的选择:
num = 1
match num:
case 1:
role = "boss"
case 2:
role = "worker"
case 3:
role = "user"
case _:
role = "other"
print(role) #输出“boss”
Python 的 match case 语法不需要自己添加烦人的break 语句,数据向下一旦匹配到合适的内容将直接跳出。这也符合Python 一贯简洁强大的代码风格。
02 更简洁的上下文管理器
在以往的Python 中,如果我们需要复制文件,则需要套娃打开两个上下文管理器。
with open("test.txt", "r") as f: # 打开第一个文件
with open("test_copy.txt", "w") as f_copy: # 打开第二个文件
content = f.read() # 从第一个文件获取内容
f_copy.write(content) # 向第二个文件写入内容
这个操作在Python 3.10 中被优化了,现在我们可以在一个上下文管理器中打开多个文件。
with (
open("test.txt", "r") as f, # 打开第一个文件
open("test_copy.txt", "w") as f_copy, # 打开第二个文件
):
content = f.read() # 从第一个文件获取内容
f_copy.write(content) # 向第二个文件写入内容
03 更清晰地定义变量多输入类型
在以往的Python 中,如果你需要在定义函数变量时,启用多个类型检查,是这样写的:
def func(value: Union[int, float]) -> Union[int, float]:
return value
新版本将这个操作简化了,不需要写那么多Union语法即可实现多类型检查功能。
def func(value: int | float) -> int | float:
return value
个人感觉这个功能感觉使用频率不高,这里就不展开赘述了。
Python 3.10 这么棒,为什么我不推荐你升级呢?
原因很简单,兼容性和适配问题。
或者换句话说:第三方库对Python 3.10 的适配缓慢,大量常用的库在它发布十天后的今天,依然无法正常安装。
Pandas
matplotlib
cv2
其他库好歹还尝试安装之后发现装不上去,
cv2直接演都不演:No matching
这只是笔者临时想到的几个比较常用的库,都无法安装,更何况一些较为小众的第三方库。
而回退到Python 3.9 呢?
恐怕也不是一个好的选择。
来源:NGA
来源:知乎
我在逛论坛的时候发现,甚至有一些网友表示,它们使用的库和模块还没有适配Python 3.9 版本。
我不推荐你升级到Python 3.10 版本的原因,你了解了吗?
如果对Python 3.9 的特性没有需求(Python 3.8 升级到3.9 的提升远没有Python 3.9 到3.10 的大),
我更建议你保留在Python 3.8 版本养老。
毕竟鲁迅说过:“更少由开发环境带来的BUG,会对程序员身心健康带有利的影响。”
猜你喜欢
- 2024-09-11 给3D Slicer添加Python第三方插件库
- 2024-09-11 使用Python创建自己的Instagram滤镜
- 2024-09-11 薅羊毛我愿称Python为最强,Python 自动化带你轻松赚钱
- 2024-09-11 史上最全的OpenCV入门教程!这篇够你学习半个月了!万字长文入门
- 2024-09-11 使用python实现简易的人脸检测(python人脸检测106关键点)
- 2024-09-11 机器视觉技术(一)边缘提取(机器视觉边缘检测)
- 2024-09-11 Python-OpenCV 16. 图像特征检测与描述算法
- 2024-09-11 Flask—远程查看行空板USB摄像头视频
- 2024-09-11 OpenCV+Python识别车牌和字符分割的实现
- 2024-09-11 在Fedora中安装OpenCV-Python | 二
- 08-02C|在一个结构体嵌套一个共用体实现一体多用
- 08-02C++中,常用的强制类型转换函数
- 08-02如何使用C语言编程实现一个推箱子游戏?技术核心和算法实现
- 08-02C++20 新特性(24):模板访问权限和typename的放宽
- 08-02C++零基础到工程实践
- 08-02[深度学习] Python人脸识别库face_recognition使用教程
- 08-02AI算法之怎么利用Python实现支持向量机SVM算法
- 08-02【机器学习】SVM支持向量机
- 1521℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)