鱼C-小师妹 发表于 2021-10-12 07:47:25

锵锵锵锵锵!Python 3.10 来啦!!分享 3 个让小师妹眼前一亮的好玩东东!

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

https://www.bilibili.com/video/BV1W34y1S74u?spm_id_from=333.999.0.0


传送门

Python 3.10 正式发布啦!!

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

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

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



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

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

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

expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
            38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6,
some_other_code = foo()
之前版本的解释器会报告令人迷惑的语法错误位置:

File "example.py", line 3
    some_other_code = foo()
                  ^
SyntaxError: invalid syntax
但在 Python 3.10 中则会发出信息量更多的错误提示:

File "example.py", line 1
    expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
               ^
SyntaxError: '{' was never closed
错误出处指向很明确。

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


1、match..case.. 语法

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

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

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

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

def iLoveFishc(status):
    match status:
      case 400:
            return "错误请求"
      case 401 | 403 :
            return "不准"
      case 404:
            return "没找到"
      case 200:
            return "访问成功,祝自学编程顺利"
      case _:
            return "你的网络有问题啦"
和 switch..case.. 玩法一毛一样~


2、严谨的 zip 方法

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

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

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

**** Hidden Message *****

就像酱紫:

In : a=                                                            

In : b=['a','b']                                                            

In : for i in zip(a,b):
    ...:   print(i)
    ...:                                                                        
(1, 'a')
(2, 'b')
为了解决这个问题,zip 添加了一个布尔类型的参数 strict。

先来看看 3.10 以前 zip 原型:

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

zip(*iterables, strict=False)
只有当其为 True 时,打包的可迭代对象长度不一致时会抛异常;

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

https://www.bilibili.com/video/BV1HT4y1K7DY?p=19

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

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

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


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

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

好啦,下课~

冬雪雪冬 发表于 2021-10-12 08:39:51

我得将办公室的电脑升级到win10了,要不没法享用python的新版了。

冬雪雪冬 发表于 2021-10-12 09:06:26

以前我是用itertools的zip_longest来解决可迭代对象不等长问题,现在简单了。

myqf123 发表于 2021-10-12 10:08:39

学习学习

鱼C-小师妹 发表于 2021-10-12 10:38:54

冬雪雪冬 发表于 2021-10-12 08:39
我得将办公室的电脑升级到win10了,要不没法享用python的新版了。

还真是{:5_98:}

potato_soul 发表于 2021-10-12 11:07:54

1

傻眼貓咪 发表于 2021-10-12 11:17:01

{:5_105:}

fish_nian 发表于 2021-10-12 13:59:03

{:10_268:}

想念的温度 发表于 2021-10-12 14:32:32

{:10_323:}

sunyt 发表于 2021-10-12 16:31:02

0000

hrpzcf 发表于 2021-10-12 16:41:32

感觉没什么动力装3.10,我才装上不到半个钟又卸了,还在用3.7.9

咸鱼垂钓 发表于 2021-10-12 22:23:26

划句顾 发表于 2021-10-12 23:02:12

芜湖{:10_257:}

帅昊昊昊 发表于 2021-10-12 23:24:22

3.8的路过

Daniel_Zhang 发表于 2021-10-13 01:01:36

感觉没啥好更新的

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

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

zip 我没用过,对我没啥影响{:10_245:}

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

好多 package 因为年久失修,疏于维护,不支持很新的版本{:10_247:}

嘉岳呀 发表于 2021-10-13 19:02:11

3.8.1 路过

qiuyouzhi 发表于 2021-10-13 19:05:29

PS: case _ = default

hornwong 发表于 2021-10-13 20:32:01

{:5_95:}

鱼C-小师妹 发表于 2021-10-14 09:29:10

Daniel_Zhang 发表于 2021-10-13 01:01
感觉没啥好更新的

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


确实 3.8.x 目前最稳定

Nate_2020 发表于 2021-10-14 09:32:49

怎么直接升级?
页: [1] 2
查看完整版本: 锵锵锵锵锵!Python 3.10 来啦!!分享 3 个让小师妹眼前一亮的好玩东东!