利用Conda尝鲜Python 3.10
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中,代码的错误提示,对于具体错误行位置的提示更加准确了:

以上就是本文的全部内容,欢迎在评论区与我进行讨论。
利用Conda尝鲜Python 3.10的更多相关文章
- Odoo10尝鲜:MRP 10 新概念
OEE [ overall equipment Effectiveness 整体设备效率 ] 整體設備效率是整合稼働率 (Availability).產能效率 (Performance).良率 (Qu ...
- Windows 10 周年版尝鲜
早在今年的 Build 大会上,微软就开始宣传最新的 Windows 10 周年版更新,炫了不少特技,直到昨天(2016/8/2 PST)才正式放出,相关新闻可以参考这里,正式的版本为 Version ...
- 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...
- 利用Anaconda完美解决Python 2与python 3的共存问题
前言 现在Python3 被越来越多的开发者所接受,同时让人尴尬的是很多遗留的老系统依旧运行在 Python2 的环境中,因此有时你不得不同时在两个版本中进行开发,调试. 如何在系统中同时共存 Pyt ...
- 前端每周清单第 49 期:Webpack 4 Beta 尝鲜,React Windowing 与 setState 分析,Web Worker 实战
前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID: fron ...
- Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性
译者前言:相信凡是用过 zip() 内置函数的人,都会赞同它很有用,但是,它的最大问题是可能会产生出非预期的结果.PEP-618 提出给它增加一个参数,可以有效地解决大家的痛点. 这是 Python ...
- 【翻译】五步快速使用LINQPad尝鲜StreamInsight
StreamInsight 学习地址:http://www.cnblogs.com/StreamInsight/archive/2011/10/26/StreamInsight-Query-Seri ...
- 【响应式】foundation栅格布局的“尝鲜”与“填坑”
提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...
- Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...
随机推荐
- ffmpeg 视频ts切片生成m3u8
下面几种转换方式是不同版本和方法 新版本ffmpeg转视频直接可以切边并生成 m3u8(目前用的方式,也可以用选项 segment ): ffmpeg -i '源文件.mp4' -c:v h264 - ...
- dubbo暴露原理及引用过程
服务暴露 服务引用:
- openstack新建实例各种报错解决
最近自己装了下Openstack,零基础安装,参照了网上不少教程. 吃了百家饭的后果,就是出现了一堆不明问题...openstack安装比较复杂,很多配置文件,一个地方配置不正确,可能会导致后面的功能 ...
- a、b、n为正整数且a>b,证明:若n|(a^n-b^n),则n|(a^n-b^n)/(a-b).
- 前端axios请求二进制数据流转换生成PDF文件空白问题(终极解决方案)
本文章共1570字,预计阅读时间1 - 3分钟. 问题场景: axios请求二进制数据转换生成PDF空白问题,使用axios请求后端接口,后端返回的二进制流文件,需要转换成PDF,但是在postman ...
- Shell脚本基础及基本常用命令
1.概述 脚本语言(shell.python):解释性语言,用解释器解释 运行效率低 | c.java:描述性语言,运行效率高 以.sh结尾会有高亮显示 执行: sh hello.sh 或者 chmo ...
- 【曹工杂谈】Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗
Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗 前奏 我们上篇文章,跟大家说了下,怎么调试maven插件的代码,注意,是插件的代码.插件,是要让主框架来执行的,主框架是谁呢,就是maven ...
- Merchant
\(get\)二分新用法. 每道题都有答案范围提示,以前只是以为是用来提示用什么类型输出的. 从来没想过直接用它来二分. 这道题真的刷新了我的认知啊...... 整道题的复杂度是\ ...
- Linux 网卡驱动sk_buff内核源码随笔
这几天在调试有关网卡驱动的东西,有很多地方不清楚.有关网卡驱动部分主要有两个很重要的结构体:struct net_device 和struct sk_buff. 驱动大部分都是围绕这两个东西进行操作的 ...
- Element UI:级联选择器Cascader_动态加载_多级请求不同接口(已知第一级调取第二级)
ELEMENT UI_CASCADER 使用过饿了么级联动态加载的小伙伴应该都知道,lazyLoad本身是一个无差别返回渲染结点的函数. 当我们存在一个需求:已知级联选择器的第一级结点,现在需要通过第 ...