python3.8,3.9,3.10,3.11特性比较

这篇具有很好参考价值的文章主要介绍了python3.8,3.9,3.10,3.11特性比较。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近计划将python2迁移到python3,由于本人学习时用的3.7版本,所以仅作大于3.7版本的比较。

3.8

文档地址:python3.8

新增赋值表达式:=(海象运算符)

作用:避免重复调用,使代码更加简洁。PS:别当GO写,它不支持声明并赋值变量

import re

# 3.8
if match := re.search(r"python", "I love python! \r\n And python love me! \r\n", re.I | re.M | re.DOTALL):
    print(match.group())

# 3.7
match = re.search(r"python", "I love python! \r\n And python love me! \r\n", re.I | re.M | re.DOTALL)
if match:
    print(match.group())

仅限位置形参

作用:

  1. 新增了一个函数形参语法 / 用来指明某些函数形参必须使用仅限位置而非关键字参数的形式。
  2. /区分了前后用什么传参方式
# *号代表e,f必须用键值
# /号代表a,b必须用位置
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

# 合法调用
f(10, 20, 30, d=40, e=50, f=60)
# 不合法调用
f(10, b=20, c=30, d=40, e=50, f=60)   # b不能是关键词参数
f(10, 20, 30, 40, 50, f=60)           # e必须是关键字参数

3.7的老人感觉:这两个符号加上会降低代码可读性

f-字符串支持 = 用于自动记录表达式和调试文档

作用:f’{expr=}’ 的 f-字符串将扩展表示为表达式文本

author = "Generalzy"

print(f'{author=}')
# author='Generalzy'

dict 和 dictview 可以使用 reversed() 按插入顺序反向迭代

作用:python3.7开始后,python的dict就有序了,现在支持反转字典顺序

dic = {"name": "generalzy", "gender": 1, "age": "2000"}
for key, val in dic.items():
    print(key, val)
# name generalzy
# gender 1
# age 2000

print(reversed(dic))
# <dict_reversekeyiterator object at 0x00000257213E71D0>

for key in reversed(dic):
    print(key)
# age
# gender
# name

asyncio.run()更加稳定

作用:asyncio.run() 已经从暂定状态晋级为稳定 API。 此函数可被用于执行一个 coroutine 并返回结果,同时自动管理事件循环

import asyncio

async def main():
    await asyncio.sleep(0)
    return 42

asyncio.run(main())

因此 asyncio.run() 应该作为运行 asyncio 程序的首选方式。

csv.DictReader返回值改变

作用:csv.DictReader 现在将返回 dict 而不是 collections.OrderedDict,此工具现在会更快速且消耗更少内存同时仍然保留字段顺序。

multiprocessing增加进程间共享内存的方法

作用:添加了新的 multiprocessing.shared_memory 模块。

3.9

文档:python3.9

字典合并 (|)与更新运算符(|=)

作用:它们为现有的 dict.update 和 {**d1, **d2} 字典合并方法提供了补充。

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

增加了 str.removeprefix(prefix) 和 str.removesuffix(suffix) 用于方便地从字符串移除不需要的前缀或后缀。

作用:用于方便地从字符串移除不需要的前缀或后缀。

标准多项集中的类型标注泛型

作用:

  1. 可以使用内置多项集类型例如 list 和 dict 作为通用类型而不必从 typing 导入对应的大写形式类型名 (例如 List 和 Dict)。
  2. 标注类型更加方便了。
def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)

新的解析器

Python 3.9 使用于基于 PEG 的新解析器替代 LL(1)。 新解析器的性能与旧解析器大致相当,但 PEG 在设计新语言特性时的形式化比 LL(1) 更灵活。

file 属性将是一个绝对路径,而不是相对路径。

作用:__file__在任何情况下都将是一个绝对路径

新增时区zoneinfo模块

zoneinfo 模块为标准库引入了 IANA 时区数据库。 它添加了 zoneinfo.ZoneInfo,这是一个基于系统时区数据的实体 datetime.tzinfo 实现。

>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta

>>> # Daylight saving time
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
'PDT'

>>> # Standard time
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST

random新增方法生成随机字节串

增加了新的 random.Random.randbytes 方法:生成随机字节串。

3.10

文档:python3.10

带圆括号的上下文管理器

作用:允许将过长的上下文管理器集能够以与之前 import 语句类似的方式格式化为多行的形式。

with (
    CtxManager1() as example1,
    CtxManager2() as example2,
    CtxManager3() as example3,
):
    ...

更清楚的错误消息

结构化模式匹配match…case…语句

作用:类似其他语言的:switch…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 419 | 420 | 421:
        	return "我加的"
        case _:
            return "Something's wrong with the internet"

# 模式和类
class Point:
    x: int
    y: int

def location(point):
    match point:
        case Point(x=0, y=0):
            print("Origin is the point's location.")
        case Point(x=0, y=y):
            print(f"Y={y} and the point is on the y-axis.")
        case Point(x=x, y=0):
            print(f"X={x} and the point is on the x-axis.")
        case Point():
            print("The point is located somewhere else on the plane.")
        case _:
            print("Not a point")
            
# 嵌套模式:模式可以任意地嵌套。
match points:
    case []:
        print("No points in the list.")
    case [Point(0, 0)]:
        print("The origin is the only point in the list.")
    case [Point(x, y)]:
        print(f"A single point {x}, {y} is in the list.")
    case [Point(0, y1), Point(0, y2)]:
        print(f"Two points on the Y axis at {y1}, {y2} are in the list.")
    case _:
        print("Something else is found in the list.")

# 约束项:可以向一个模式添加 if 子句,称为“约束项”。 如果约束项为假值,则 match 将继续尝试下一个 case 语句块。 
match point:
    case Point(x, y) if x == y:
        print(f"The point is located on the diagonal Y=X at {x}.")
    case Point(x, y):
        print(f"Point is not on the diagonal.")

类比一下GO的:

type P struct {
	x,y int
}
func main() {
	// invalid case []int{...} in switch (can only compare slice a to nil)
	//a:=[]int{1,2}
	//switch nil{
	//case []int{1,2}:
	//	fmt.Println(a)
	//}
	
	p:=P{1,2}
	switch p {
	case P{1,2}:
		fmt.Println(p)
		// {1 2}
	}
}

新的类型联合运算符X | Y

作用:简洁标注

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

int 类型新增了一个方法 int.bit_count()

作用:返回给定整数的二进制展开中值为一的位数,或称“比特计量”。

现在 dict.keys(), dict.values() 和 dict.items() 所返回的视图都有一个 mapping 属性

作用:给出包装了原始字典的 types.MappingProxyType 对象。

zip() 函数有一个可选的 strict 旗标

作用:要求所有可迭代对象的长度都相等,否则异常

3.11

文档:python3.11

比上一个版本快60%

Self type

作用:标注增加self类型文章来源地址https://www.toymoban.com/news/detail-447683.html

class MyLock:
    def __enter__(self) -> Self:
        self.lock()
        return self

class MyLock:
    def __enter__(self) -> Self:
        self.lock()
        return self

    ...

class MyInt:
    @classmethod
    def fromhex(cls, s: str) -> Self:
        return cls(int(s, 16))

    ...

编译器现在将优化只包含格式代码 %s, %r 和 %a 的字符串字面值中的简单 printf 风格 % 格式化 并使其速度与对应的 f-string 表达式一样快。

到了这里,关于python3.8,3.9,3.10,3.11特性比较的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在 CentOS 7 / RHEL 7 上安装 Python 3.11

    原文链接:https://computingforgeeks.com/install-python-3-on-centos-rhel-7/ Python 是一种高级解释性编程语言,已被用于各种应用程序开发,并在近年来获得了巨大的流行。Python 可用于编写广泛的应用程序,包括 Web 开发、数据分析、科学计算、人工智能、游戏等。由于其简单易用,它是初

    2024年02月11日
    浏览(29)
  • python下载安装教程(Python 3.10版本)

    今天换了新的电脑,需要重新安装python和PyCharm,就简单的写个教程吧~ 1、进入Python官网 官网地址:https://www.python.org 2、点击【Downloads】展开后点击【Windows】跳转到下载python版本页面,选择\\\"Stable Releases\\\"稳定版本,我下载的是Python 3.10.10版本,所以找到【Python 3.10.10-Feb.8,2023】

    2024年02月10日
    浏览(53)
  • GPU深度学习环境搭建:Win10+CUDA 11.7+Pytorch1.13.1+Anaconda3+python3.10.9

    在命令行中输入【nvidia-smi】可以当前显卡驱动版本和cuda版本。 根据显示,显卡驱动版本为:Driver Version: 516.59,CUDA 的版本为:CUDA  Version 11.7。 此处我们可以根据下面的表1 显卡驱动和cuda版本对应关系得知,Driver Version: 527.47  516.31,所以可以使用 CUDA Version 11.7 CUDA工具版本

    2024年04月26日
    浏览(47)
  • pytorch的安装(CUDA10.2+cuDNN8.3.3+torch1.10+​torchvision​0.11.1+python3.9)

    (已存网盘和硬盘,文件夹含三个文件) 本文基本逻辑是: 一、先根据电脑硬件的条件获取本身CUDA版本,据此以及表格比较得出cuDNN、torch、torchvision、python版本。 二、在 NVIDIA 官网下载CUDA和cuDNN,获取torch的下载链接,网页提供python3.9的下载链接 三、安装CUDA后,把cuDNN这个

    2024年01月17日
    浏览(44)
  • Python 3.11 版本是对线程安全做了什么更改吗

    问题:这份代码在 3.11.3 中它居然输出 0 ,一度以为自己写错了,抱着不信邪的态度,又搞了个 Python 3.9.7 的环境试了下,果然还是符合自己预期,输出不为 0,想问下 3.11 版本中是做了什么修改吗? 答案: 首先在 Python 字节码执行的时候 ,GIL 并不是随时能在任意位置中断切

    2024年02月09日
    浏览(27)
  • 安装python 3.11以及安装pip过程-是安装embedded纯净版的python

    为了纯净,我在Win10上选择安装了embedded的版本的python 3.11,结果为了安装pip倒腾了一早上。现记录如下。 一、安 装python 3.11 从python官网下的,今天的版本是3.11.1,链接:https://www.python.org/ftp/python/3.11.1/python-3.11.1-embed-amd64.zip,下好之后,解压到一个文件夹就行,我的本地文件

    2024年02月17日
    浏览(35)
  • Win11环境Mecab日语分词和词性分析以及动态库DLL not found问题(Python3.10)

    日语因为存在假名,会导致翻译软件进行翻译时机翻味道过重的问题,比如積ん読(つんどく)这个词,大多数软件会翻译成:堆积的读,但其实是明明买了书却不读,光放着的意思。有时候也需要单独查句子中的单词释义来理解句子的意思,但一看下去全是假名,无法像中

    2024年02月03日
    浏览(31)
  • 构建Docker基础镜像(ubuntu20.04+python3.9.10+pytorch-gpu-cuda11.8)

    内容如下 访问官网下载页 https://www.python.org/downloads/release/python-3910/ 下拉选择 Gzipped 包 ps:创建镜像名为 ub2004py3910pytorchgpucuda118 标签为 latest 的镜像,从当前路径下的 DockerFile 文件打包

    2024年02月05日
    浏览(44)
  • Python及Pycharm专业版下载安装教程(Python 3.11版)附JetBrains学生认证教程

    本篇主要介绍Python和PyCharm专业版的下载及安装方式,以及通过两种方式进行JetBrains学生认证。 1.1、进入python官网:https://www.python.org 点击【Downloads】然后选择需要下载的平台,这里以【Windows】为例。 1.2、在该页面选择要下载的版本。这里选择的是64位稳定发布3.11.8版本。具

    2024年04月11日
    浏览(30)
  • pycharm unsupported Python 3.1报错:pycharm无法识别python 3.10

    本人电脑中的pycharm版本是2019的,在使用python3.10环境的时候,pycharm无法识别,出现如下错误: 网上说是因为python版本过高,无法兼容低版本的pycharm,解决方案分两种:要么降低python环境的版本,取消使用3.10,改用3.7或者3.8之类的版本;要么就是下载高版本的pycharm。这里我

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包