鱼C论坛

 找回密码
 立即注册
查看: 4504|回复: 23

[技术交流] 锵锵锵锵锵!Python 3.10 来啦!!分享 3 个让小师妹眼前一亮的好玩东东!

[复制链接]
发表于 2021-10-12 07:47:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 鱼C-小师妹 于 2021-10-13 18:54 编辑



2021-10-12_07-45-18.jpg
传送门

Python 3.10 正式发布啦!!

小师妹快速浏览上面的官方页面,发现两个有趣的东东:一个是语法类,一个是标记库函数。

有言在先,记得先把你们的 Python 升级到 3.10 哈~

更新完以后 shell 就是这个样子:

Snap3.png

第一个很棒的提升点就是将“错误消息”指向的更明确。

现在当解析包含有未关闭括号的代码时,解释器会包括未关闭括号的位置而不是显示 SyntaxError: unexpected EOF while parsing 并指向某个不正确的位置。

例如,考虑以下代码,注意未关闭的 “ { ”):

  1. expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
  2.             38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6,
  3. some_other_code = foo()
复制代码

之前版本的解释器会报告令人迷惑的语法错误位置:

  1. File "example.py", line 3
  2.     some_other_code = foo()
  3.                     ^
  4. SyntaxError: invalid syntax
复制代码

但在 Python 3.10 中则会发出信息量更多的错误提示:

  1. File "example.py", line 1
  2.     expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
  3.                ^
  4. SyntaxError: '{' was never closed
复制代码

错误出处指向很明确。

类似地,涉及未关闭字符串字面值 (单重引号和三重引号) 的错误现在会指向字符串的开头而不是报告 EOF/EOL。


1、match..case.. 语法

熟悉 C++ 或者 JavaScript 的程序员对于 switch 和 case 应该不会陌生。

但是对于之前的 Python 版本是没有类似的语法滴。

不过从 3.10 开始 Python 终于有类似语法了!

那就是 match..case..,语法结构很简单,来看例子:

  1. def iLoveFishc(status):
  2.     match status:
  3.         case 400:
  4.             return "错误请求"
  5.         case 401 | 403 :
  6.             return "不准"
  7.         case 404:
  8.             return "没找到"
  9.         case 200:
  10.             return "访问成功,祝自学编程顺利"
  11.         case _:
  12.             return "你的网络有问题啦"
复制代码

switch..case.. 玩法一毛一样~


2、严谨的 zip 方法

小甲鱼老师在最新版 Python 课程中的字典部分介绍了 zip 的玩法,很详尽,竟然和 3.10 新特性不谋而合,真的是厉害~

zip 打包多个可迭代对象,配合 for 后接下来的操作以元组为基本单位。

但是有一个有些致命的隐含问题:

游客,如果您要查看本帖隐藏内容请回复


就像酱紫:

  1. In [43]: a=[1,2,3]                                                              

  2. In [44]: b=['a','b']                                                            

  3. In [45]: for i in zip(a,b):
  4.     ...:     print(i)
  5.     ...:                                                                        
  6. (1, 'a')
  7. (2, 'b')
复制代码

为了解决这个问题,zip 添加了一个布尔类型的参数 strict。

先来看看 3.10 以前 zip 原型:

  1. zip(*iterables)
复制代码

3.10 以后增加一个布尔类型参数 strict,默认为 False:

  1. zip(*iterables, strict=False)
复制代码

只有当其为 True 时,打包的可迭代对象长度不一致时会抛异常;

当为 False 时,与之前版本的 zip 完全相同,因此 zip 是完全向后兼容的。



下一讲小讲堂就准备基于这个 zip 新特性来出个案例,准备好踩坑吧,哈哈哈哈~

上面就是 3 个让小师妹眼前一亮的好玩东东!

其他的一些比较有实质性变化的更新:

  • 新的类型标注特性
  • 重要的弃用、移除或限制,如PEP 632,弃用 distutils 模块。
  • 新的特性:带圆括号的上下文管理器
  • 更清楚的错误消息

如果你还知道 3.10 什么有趣的玩法,欢迎下方留言和热爱学习的我们一起交流下~

好啦,下课~

评分

参与人数 1荣誉 +2 鱼币 +3 贡献 +3 收起 理由
不二如是 + 2 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 08:39:51 | 显示全部楼层
我得将办公室的电脑升级到win10了,要不没法享用python的新版了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-12 09:06:26 | 显示全部楼层
以前我是用itertools的zip_longest来解决可迭代对象不等长问题,现在简单了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-12 10:08:39 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-12 10:38:54 | 显示全部楼层
冬雪雪冬 发表于 2021-10-12 08:39
我得将办公室的电脑升级到win10了,要不没法享用python的新版了。

还真是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-12 11:07:54 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 11:17:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 13:59:03 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 14:32:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 16:31:02 | 显示全部楼层
0000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 16:41:32 From FishC Mobile | 显示全部楼层
感觉没什么动力装3.10,我才装上不到半个钟又卸了,还在用3.7.9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-12 22:23:26 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 23:02:12 | 显示全部楼层
芜湖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 23:24:22 | 显示全部楼层
3.8的路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-13 01:01:36 | 显示全部楼层
感觉没啥好更新的

用 vscode 就能解决括号没有关闭的问题

matach case 感觉 if 就可以替代了?如果是我没发现实际用法,请轻喷

zip 我没用过,对我没啥影响

3.8.6 还稳定一点,而且有我喜欢的海象运算符,3.8 之前的都没有

好多 package 因为年久失修,疏于维护,不支持很新的版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-13 19:02:11 | 显示全部楼层
3.8.1 路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-13 19:05:29 | 显示全部楼层
PS: case _ = default
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-13 20:32:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-14 09:29:10 | 显示全部楼层
Daniel_Zhang 发表于 2021-10-13 01:01
感觉没啥好更新的

用 vscode 就能解决括号没有关闭的问题

确实 3.8.x 目前最稳定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-14 09:32:49 | 显示全部楼层
怎么直接升级?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 01:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表