本文主要介绍Python3.9的一些新特性,如:更快速的进程释放,性能的提升,简便的新字符串函数,字典并集运算符以及更兼容稳定的内部API,详细如下:

  • 字典并集和可迭代更新

  • 字符串方法

  • 类型提示

  • 新的数学函数

  • 新的解析器

  • IPv6范围内的地址

  • 新模块:区域信息

  • 其他语言更改

1、字典并集和可迭代更新

Python 3.9 dict类。如果有两个字典a和b,则现在可以使用这些运算符进行合并和更新。

我们有合并运算符|:

使用Iterables进行字典更新

| =运算符的另一个很棒的性能是能够使用可迭代对象(如列表或生成器)用新的键值对来更新字典:

  1.  
    a = {'a': 'one', 'b': 'two'}
  2.  
    b = ((i, i**2) for i in range(3))
  3.  
    a |= b
  4.  
    print(a)
  5.  
     
  6.  
    {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}

2、字符串方法

removeprefix()和removesuffix()

str.removeprefix(substring:string)字符串方法:如果str以它开头的话,将会返回一个修改过前缀的新字符串,否则它将返回原始字符串。

str.removesuffix(substring:string)字符串方法:如果str以其结尾,则返回带有修改过后缀的新字符串,否则它将返回原始字符串。

这两个函数执行的操作将使用string [len(prefix):]作为前缀,string [:-len(suffix)]作为后缀。

这些是非常简单的操作,因此实现的也是非常简单的功能,但是考虑到可能会经常执行这些操作,最好有一个内置的函数可以完成此操作。

3、类型提示

Python是动态类型的,动态地为变量指定数据类型,意味着我们无需在代码中指定数据类型。

但有时可能会造成混淆!

对于数据类型的静态分配,通常使用类型提示。这是在Python 3.5中引入的。从3.5开始,我们可以指定类型,但这是比较麻烦的。

这项更新真正改变了这一点,现在可以将内置集合类型(List和Dict)用作泛型类型。

之前,必须通过输入来调用大写类型List和Dict。

  1.  
     
  2.  
    ef greet_all(names: list[str]) -> None:
  3.  
    for name in names:
  4.  
    print("Hello", name)

现在,无需从typing.List来调用List

4、新的数学函数

数学模块添加和改进了许多辅助功能,从对现有功能的改进开始。

import math#Greatest common divisormath.gcd(80, 64, 152)#8

以前计算最大公因数的gcd函数只能应用于2个数字,迫使程序员在处理更多数字时必须执行类似math.gcd(80,math.gcd(64,152))的操作。从Python 3.9开始,我们可以将其应用于任意数字的值。

math模块中第一个新添加的是math.lcm函数:

  1.  
    #Least common multiple
  2.  
    math.lcm(4, 8, 5)
  3.  
    #40

math.lcm计算其参数的最小公倍数。与GCD一样,它允许可变数量的参数。

5、新的解析器

这部分更多是视线之外的改变,但有可能成为Python未来发展中最重大的改变之一。

Python 3.9使用了一个新的基于PEG的解析器。以前Python使用LL(1),在构建该语言的新功能时,PEG比LL(1)更灵活。官方文档中表示,这种灵活性将在Python 3.10及更高版本中体现出来。

ast模块使用新的解析器,并产生与旧解析器相同的AST。

6、IPv6范围内的地址

Python 3.9的另一个变化是可以指定IPv6地址的范围。IPv6范围用于指定相应IP地址在Internet的哪个部分有效。

范围可以使用%符号在IP地址的末尾指定——例如:3FFE:0:0:1:200:F8FF:FE75:50DF%2——因此该IP地址在范围2中,即链接本地地址。

因此,如果需要使用Python处理IPv6地址,现在可以这样处理:

  1.  
    from ipaddress import IPv6Address
  2.  
    addr = IPv6Address('ff02::fa51%1')
  3.  
    print(addr.scope_id)
  4.  
    #"1" - interface-local IP address

7、新模块:区域信息

区域信息

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

8、其他语言更改

__import __()现在增加了ImportError以替代ValueError,通常在相对导入超出其顶级包时发生。

“” .replace(“”,s,n)现在对于所有非零n返回s而不是空字符串。现在它与““ .replace(”“,s)相一致。

默认状态下,Python变得更快

Python的每个修订版与以前的版本相比都有性能改进。Python 3.9进行了两项重大改进,可以提高性能但无需对现有代码进行任何更改。

第一个改进更多涉及矢量调用协议的使用,通过最小化或消除临时对象进行许多常见函数的调用。Python 3.9引入了几个新的内置函数,包括range、tuple、set、frozenset、list、dict ——使用vectorcall可以加快执行速度。

Python切换到年度发布周期

到目前为止,Python已经以18个月的节奏进行了开发和发布。PEP 602提议Python开发团队采用年度发布周期,并且该提议已被接受。

Python 3.9就要来了......,令人兴奋的时刻的更多相关文章

  1. 教程|要想Hadoop能够运行Python程序,就要会MRJob

    首先 要想Hadoop能够很流畅的Python程序,学习mrjob可能是最直接.最简单的方法了 你甚至都不要按安装部署Hadoop集群. mrjob拥有很多优秀的特性比如: 支持多步骤的MapRedu ...

  2. Python开发【第九篇】:进程、线程

    什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于,程序是指令的集合,它是进程运行的静态描述文本 ...

  3. Python学习笔记整理总结【网络编程】【线程/进程/协程/IO多路模型/select/poll/epoll/selector】

    一.socket(单链接) 1.socket:应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socke ...

  4. Python学习之==>线程&&进程

    一.什么是线程(thread) 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一个线程指的是进程中一个单一顺序的控制流,一个进程中可以包含多个线程,每条线程并行 ...

  5. python基础:多进程、多线程

    一.定义和区别 1.一个任务就是一个进程,进程就是资源的集合.比如打开浏览器,启动一个进程.当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程. 2.线程是包含在进程中的,每个进程 ...

  6. 新浪云SAE搭建python环境 问题拾遗

    1.python程序部署到sae上需要做的改动 在线上需要转换成wsgi的形式运行python程序. sae中运行python程序需要指定一个函数为入口函数. application = sae.cr ...

  7. python 学习笔记八 进程和线程 (进阶篇)

    什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执 ...

  8. python多线程与多进程

    由于python的内存回收机制不是线程安全的,所以就有了GIL保证每个进程内,同一时刻最多只有一个线程在运行. 于是,对于python的多线程来讲,其实同一时刻依然只有一个线程在运行.而且由于线程切换 ...

  9. Python核心编程--学习笔记--3--Python基础

    本章介绍基本的Python语法.编程风格:并简要介绍标识符.变量和关键字,以及变量占用内存的分配和回收:最后给出一个较大的Python样例程序来体验这些特性. 1 语句和语法 1.1 注释 可以在一行 ...

随机推荐

  1. Ubuntu通过Apache安装WebDav

    使用KeePass保存密码,在个人服务器上安装WebDav协议. # 安装Apache2服务器 sudo aptitude install -y apache2 # 开启Apache2中对WebDav ...

  2. 为Facebook messenger平台开发聊天机器人

    介绍 在电子商务网上商店发明之前,我们总是有机会与销售代表或分销商在选择商品或服务时交谈.在进入数字世界后,这个领域变得沉默.这样对顾客方便吗?我认为不是.向销售代表或经销商询问他们想要的产品或服务是 ...

  3. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之二(五十)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  4. Java泛型的协变与逆变

    泛型擦除 Java的泛型本质上不是真正的泛型,而是利用了类型擦除(type erasure),比如下面的代码就会出现错误: 报的错误是:both methods  have same erasure ...

  5. Django的安装和项目的启动

    一.安装(安装最新LTS版): 1.命令行安装 pip install django==1.11.18 -i 源 2.pycharm 安装    二.创建项目 1.命令行创建 下面的命令创建了一个名为 ...

  6. xshell多窗口同时执行输入命令

  7. centos8安装及配置nfs4

    一,用rpm检查是否有nfs-utils的包已安装 [root@localhost liuhongdi]# rpm -qa | grep nfs-utils nfs-utils-2.3.3-26.el ...

  8. linux mount挂载命令

    [root@localhost src]# mount 查询系统中已经挂载的设备 [root@localhost src]# mount -a 依据配置文件 /etc/fstab的内容,自动挂载

  9. 【API管理 APIM】APIM中如何配置使用URL路径的方式传递参数(如由test.htm?name=xxx 变为test\xxx)

    问题描述 在默认的URL传递参数中,我们使用的是https://test01.azure-api.cn/echo/resource?param1=sample&param2=testname这 ...

  10. Redis基础——剖析基础数据结构及其用法

    这是一个系列的文章,打算把Redis的基础数据结构.高级数据结构.持久化的方式以及高可用的方式都讲一遍,公众号会比其他的平台提前更新,感兴趣的可以提前关注,「SH的全栈笔记」,下面开始正文. 如果你是 ...