千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Python3.10的新特性

Python3.10的新特性

来源:千锋教育
发布人:wjy
时间: 2022-06-07 13:41:00 1654580460

  最新的 TIOBE的语言排名Python已经荣登榜首,无容置疑Python已经是当今最流行的编程语言之一,并且已被广泛应用于各种领域。

最新版Python3.10新特性83

 

  更加令我们兴奋的是,经过多次 alpha、beta 和 rc 测试,Python 编程语言终于发布了 3.10 版本。喜大普奔!

最新版Python3.10新特性152

 

  安装教程请参照:

  虽然新发布的3.10你不会立刻应用到你的开发中,但是这几点新特性还是让宋宋禁不住拍手叫好,福音啊!更详细的内容大家可以参看:https://docs.python.org/3.10/whatsnew/3.10.html

  在此给大家总结出以下几点:

  新的语法特性有:

  • 模式匹配语法

  • 正式允许带括号的上下文管理器

  标准库中的新功能有:向 zip 添加可选的长度检查

  解释器改进:用于调试和其他工具的精确行号

  新类型功能:

  • 显式类型别名

  • 允许将联合类型写为 X | Y

  • 参数规范变量

  删除、弃用与限制:

  • 需要 OpenSSL 1.1.1 或更新版本

  • 弃用 distutils 模块

  • 弃用并准备删除 PyUnicodeObject 中的 wstr 成员

  • 删除 Py_UNICODE 编码器 API

  • 添加可选的 EncodingWarning

  但新版本中最为明显的还要属下面这几个:

  • 结构化模式匹配

  • 更加友好的错误提示

  • 更加严谨的zip

  结构化模式匹配

  熟悉 Java,C++的程序员对于switch和case不会陌生,但是对于Python 3.10以前,很遗憾,Python一直没有类似的语法,不过自从3.10开始Python终于有类似语法了!是 match和case,通用语法格式:

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

  <action_wildcard>

  模式匹配大大增加了控制流的清晰度和表达能力,比如:

status = int(input('请输入一个状态码:'))
match status:
case 400:
print("Bad request")
case 404:
print("Not found")
case 418:
print("I'm a teapot")
case _:
print("Something's wrong with the internet")

  结果:

  请输入一个状态码:404

  Not found

  大家可以发现跟Java的switch...case是不是很相似啊!

  更加友好的错误提示

  对于编程学习者,尤其是新手,会碰到各种各样的编程错误,而有些错误的提示又不友好,甚至有些误导!

  Python3.9采用了新的Parser,这给3.10更加人性的错误提示奠定了基础。3.10进行了改进,这个改进涵盖了:语法错误,缩进错误,属性错误,名称错误等。

  语法错误:

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

  现在的提示要好多了,会发出更多信息错误:

    expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
               ^
SyntaxError: '{' was never closed

  大量新的特殊SyntaxError异常消息已被纳入。一些最显着的如下:

  • :块前缺失

  • 理解目标中的无括号元组

  • 集合文字中和表达式之间缺少逗号

  • 不带括号的多种异常类型

  • :字典文字中的缺失值和值

  • try没有块except或finally块

  • 在比较中使用=代替==

  • *在 f 字符串中的用法

  比如:

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

  缩进错误:

  缩进错误是小白常见错误,现在有救啦,提示很友好:

>>> def foo():
...    if lel:
...    x = 2
  File "<stdin>", line 3
    x = 2
    ^
IndentationError: expected an indented block after 'if' statement in line 2

  属性错误:

  用错了属性,不仅仅告诉你错误,有时还会你一些可能的选择,简直有点人工智能的味道了。

collections.namedtoplo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?

  命名错误:

  当打印NameError由解释器引发时,PyErr_Display() 将在引发异常的函数中提供类似变量名称的建议:

>>> schwarzschild_black_hole = None
>>> schwarschild_black_hole
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole?

  更加严谨的zip

  zip打包多个可迭代对象,但是也有一个隐含问题就是如果两个可迭代对象的长度不一致,zip后丢失较长的可迭代对象元素

a=['Jack','Lily','LiLei','Tom']  
b=['a','b','C']                                                            

for i in zip(a,b):
print(i)

'''
  结果:
  ('Jack', 'a')
  ('Lily', 'b')
  ('LiLei', 'C')
'''

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

zip(*iterables, strict=False)

  当其为True时,打包的可迭代对象长度不一致时会抛异常;当为False时,与之前版本的zip完全相同,因此zip是完全向后兼容的。

a=['Jack','Lily','LiLei','Tom']  
b=['a','b','C']                                                            

for i in zip(a,bstrict=True):
print(i)

'''
报错如下:
 File "C:\Users\running\Desktop\casedemo.py", line 16, in <module>
    for i in zip(a,b,strict=True):
ValueError: zip() argument 2 is shorter than argument 1
'''

 

更多关于python培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT