社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

利用 Conda 尝鲜 Python 3.10

Python爱好者社区 • 4 年前 • 525 次点击  

1 简介


就在几天前,Python3.10的第一个正式版本3.10.0发布,之前我们只是从其各个测试版本中捕风捉影地知晓了一些可能加入的新特性,而在正式版本中,我们得以一睹其正式加入的诸多新特性。

本文我就将带大家学习如何通过conda快速安装3.10正式版本的Python,并体验其重要的一些新特性。

2 Python 3.10正式版本重要特性一览

如果你已经安装了conda,那么直接通过conda-forge的channel,只需要下面这一行命令即可创建新的Python3.10正式版本虚拟环境:

conda create -n py310 python=3.10 -c conda-forge -y

完成安装之后,激活环境进入Python的shell,可以看到版本为3.10.0,离谱的是我在使用pycharm设置环境后,崭新的3.10.0环境竟然被识别为3.1(真是醉了)😂,于是我换成用vscode进行演示:

下面就让我们来体验其重要的一些新特性吧~

2.1 新的结构模式匹配语法

上一次为Python引入新的语法和关键字还是async,而在这次的新版本中,引入了新的关键字match与case,从而帮助我们得以在Python中使用到其他语言中类似switch的语法,使用方式如下面例子所示,对于match其后声明的值,后续的每个case会验证是否与其对应值相等,最后的case _中的_代表Irrefutable Pattern,相当于通配符,但是只允许置于「最后」一个case中:

import sys

match sys.argv[1]:
    case '1':
        print(1)
    case '2':
        print(2)
    case '3':
        print(3)
    case _:
        print('其他输入')

match-case语法配合上通配符_,当输入容器类型的数据结构时,可以进行一些更加自由的判断:

import sys

# 1 新的结构模式匹配语法
match sys.argv[1:]:
    case ['1', '2', '3']:
        print('分支1')
    case ['4', _, '6']:
        print('分支2')
    case ['7', '8', _]:
        print('分支3')
    case _:
        print('超出已知选项!')

更有趣的是,我们还可以使用任意自定义变量名,在match-case的作用域内辅助通配匹配,从而实现类似下面例子的效果:

import sys

# 1 新的结构模式匹配语法
match (int(sys.argv[1]), int(sys.argv[2])):
    case (0, 0):
      print("原点")
    case (0, y):
      print(f"Y={y}")
    case (x, 0):
      print(f"X={x}")
    case (x, y):
      print(f"X={x}, Y={y}")
    case _:
      print('输入非法!')

类似的,针对对象的属性值,也可以进行类似的通配判断,更多用法你可以参考下面的例子进行拓展:

import sys

class Demo:
    x: int
    y: int

demo = Demo()
demo.x = int(sys.argv[1])
demo.y = int(sys.argv[2])

# 1 新的结构模式匹配语法
match demo:
    case Demo(x=0, y=0):
      print("原点")
    case Demo(x=0, y=y):
      print(f"Y={y}")
    case Demo(x=x, y=0):
      print(f"X={x}")
    case Demo(x=x, y=y):
      print(f"X={x}, Y={y}")
    case _:
      print('输入非法!')

2.2 更清晰的错误提示

在Python3.10中,针对常见的各种错误类型,执行代码后的错误提示更加明确,譬如下面是3.9与3.10针对同一种错误的错误输出信息对比:

2.3 支持括号包裹的多上下文管理器

这个特性其实在3.9中就开始出现,在3.10中进一步得到完善,使得下面的用法合法(与3.7进行对比):

2.4 更方便的联合类型提示设置

在之前的版本中,当我们用到多类型提示时,得这样写:

from typing import Union, string

def some_funcion(flexible_parameter: Union[int, string]) -> Union[int, string]:
    return flexible_parameter

而在3.10中,多类型联合不再必须用到Union,使用|连接即可,非常的方便:

from typing import string

def some_funcion(flexible_parameter: int | string) -> int | string:
    return flexible_parameter

2.5 更加准确的错误代码行位置提示

在Python3.10中,代码的错误提示,对于具体错误行位置的提示更加准确了:


以上就是本文的全部内容,欢迎在评论区讨论。

重磅!Python交流群已成立


公众号运营至今,离不开小伙伴们的支持。
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。
群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)
需要进群的朋友,可长按扫描下方二维码。


▲长按扫码

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122628