Python 3.10正式版发布

简介: Python 3.10正式版发布

Python在几天前发布了正式版3.10,虽然你不一定会马上应用到生产环境,不过还是建议有条件的可以升级体验以下,没条件直接看我这篇文章就可以了,我列了几个开发者可能比较感兴趣的特性,看看哪个是你最期待的特性。

1、更友好的错误提示

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

不仔细检查代码你还真的没法一眼看出来到底哪里语法错误。而在python3.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

类似地,还有推导式中如果忘记加圆括号时,之前一言不合直接提示语法错误

>>> {x,y for x,y in zip('abcd', '1234')}
  File "<stdin>", line 1
    {x,y for x,y in zip('abcd', '1234')}
         ^
SyntaxError: invalid syntax

而现在会告诉你,是不是忘记加圆括号了。

>>> {x,y for x,y in zip('abcd', '1234')}
  File "<stdin>", line 1
    {x,y for x,y in zip('abcd', '1234')}
     ^
SyntaxError: did you forget parentheses around the comprehension target?

嗯,这才人性化。

2、match ... case  终于来了

match ... case 语法是我比较期待的功能,它不是什么多高级的功能,类似于其它语言中的 switch ... case 语法,在多条件判断时比用 if ... elif 代码更简洁。很难想象,这个语法现在才加进来,当然, 一开始Python之父是不愿意加这个语法特性的,好在这个语法最终还是回归了,而且换了个名字。

我在想,干嘛和自己过不去,统一都叫 switch ... case 不好吗?也许这就是Python让人着迷的地方吧。

来看个例子

这是用3.10的 match case 语法

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"

case _  类似于其它语言中的 default ,当其他条件都不符合就执行这行。

用普通的if ... else 语法来写

def http_error(status):
    if status == 400:
        return "Bad request"
    elif status == 404:
        return "Not found"
    elif status == 418:
        return "I'm a teapot"
    else:
        return "Something's wrong with the internet"

3、支持括号的上下文管理器

在之前的老版本中,多个上下文管理器必须放在一行或者用转义符“\”换行

with open("xxx.py", mode="w") as f1, open("yyy.py", mode="w") as f2:
    pass
# 或者
with open("xxx.py", mode="w") as f1, \
        open("yyy.py", mode="w") as f2:
    pass

在3.10中,我们可以用括号将多个管理器放在多行,这样代码看起来整洁一些。

with (
    open("xxx.py", mode="w") as f1,
    open("yyy.py", mode="w") as f2
):
    pass

4、新的类型联合操作符

在之前版本中,对于函数参数如果希望类型支持多种,例如同时支持int和float,需要用Union:

from typing import Union
def foo(number: Union[ int, float]) -> Union[int, float]:
    return number ** 2

现在有个新的语法糖“|”,叫联合操作符,可以让代码更简洁

def square(number: int | float) -> int | float:
    return number ** 2

该操作符在函数 isinstance()issubclass() 也可以支持

# python3.10
>>> isinstance(1, int | str)
True
# python3.7
>>> isinstance(1, (int,float))
True

最后

当开发者问到Python是否还会有Python4.0的时候,Python之父直言不要对 Python 4.0 抱有希望。假如真的哪天发布了Python4.0,也不会重走2.x过度到3.0的老路。同时,我们也别指望Python的GIL能够去掉,不是没尝试过,而是去掉GIL之后更慢了。如果你的项目对性能非常敏感,不妨试试pypy,python的一个分支。


目录
相关文章
|
6月前
|
测试技术 程序员 数据库
Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
117 0
|
6月前
|
API 数据库 Docker
PyCharm 2022.2 发布了,支持最新 Python 3.11 和 PyScript 框架!
PyCharm 2022.2 发布了,支持最新 Python 3.11 和 PyScript 框架!
113 2
|
6月前
|
API 开发者 Docker
python中版本不兼容问题
【5月更文挑战第3天】python中版本不兼容问题
662 2
|
Linux 程序员 Python
自动化办公更简单了!新版python-office,有哪些更新?
自动化办公更简单了!新版python-office,有哪些更新?
113 0
自动化办公更简单了!新版python-office,有哪些更新?
|
安全 程序员 API
最新 | Python 官方中文文档正式发布!
千呼万唤始出来!Python 官方文档终于发布中文版了!受英语困扰的小伙伴终于可以更轻松地阅读官方文档了。
5307 1
最新 | Python 官方中文文档正式发布!
|
存储 API Python
Python 3.8 新功能
Python 3.8 新功能
|
SQL IDE API
PyCharm 发布了新版,支持最新 Python 3.11 和 PyScript 框架
PyCharm 发布了新版,支持最新 Python 3.11 和 PyScript 框架
|
Python
如何下载python3.7/3.8或者更早版本
如何下载python3.7/3.8或者更早版本
237 0
如何下载python3.7/3.8或者更早版本
|
自然语言处理 开发者 C++
Python 3.9 正式版要来了,会有哪些新特性?
Python 发布了版本号为 3.9.0b3 的 beta 版,后续即将发布 Python 3.9 的正式版。该版本包含了一些令人兴奋的新特性,预计正式版发布以后这些特性能够被大家广泛使用。
Python 3.9 正式版要来了,会有哪些新特性?