Python 3.9就要来了......,令人兴奋的时刻
本文主要介绍Python3.9的一些新特性,如:更快速的进程释放,性能的提升,简便的新字符串函数,字典并集运算符以及更兼容稳定的内部API,详细如下:
字典并集和可迭代更新
字符串方法
类型提示
新的数学函数
新的解析器
IPv6范围内的地址
新模块:区域信息
其他语言更改
1、字典并集和可迭代更新
Python 3.9 dict类。如果有两个字典a和b,则现在可以使用这些运算符进行合并和更新。
我们有合并运算符|:
使用Iterables进行字典更新
| =运算符的另一个很棒的性能是能够使用可迭代对象(如列表或生成器)用新的键值对来更新字典:
- a = {'a': 'one', 'b': 'two'}
- b = ((i, i**2) for i in range(3))
- a |= b
- print(a)
- {'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。
- ef greet_all(names: list[str]) -> None:
- for name in names:
- 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函数:
- #Least common multiple
- math.lcm(4, 8, 5)
- #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地址,现在可以这样处理:
- from ipaddress import IPv6Address
- addr = IPv6Address('ff02::fa51%1')
- print(addr.scope_id)
- #"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就要来了......,令人兴奋的时刻的更多相关文章
- 教程|要想Hadoop能够运行Python程序,就要会MRJob
首先 要想Hadoop能够很流畅的Python程序,学习mrjob可能是最直接.最简单的方法了 你甚至都不要按安装部署Hadoop集群. mrjob拥有很多优秀的特性比如: 支持多步骤的MapRedu ...
- Python开发【第九篇】:进程、线程
什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于,程序是指令的集合,它是进程运行的静态描述文本 ...
- Python学习笔记整理总结【网络编程】【线程/进程/协程/IO多路模型/select/poll/epoll/selector】
一.socket(单链接) 1.socket:应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socke ...
- Python学习之==>线程&&进程
一.什么是线程(thread) 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一个线程指的是进程中一个单一顺序的控制流,一个进程中可以包含多个线程,每条线程并行 ...
- python基础:多进程、多线程
一.定义和区别 1.一个任务就是一个进程,进程就是资源的集合.比如打开浏览器,启动一个进程.当一个进程需要干很多事的时候,就需要执行多个子任务,这些子任务就是线程. 2.线程是包含在进程中的,每个进程 ...
- 新浪云SAE搭建python环境 问题拾遗
1.python程序部署到sae上需要做的改动 在线上需要转换成wsgi的形式运行python程序. sae中运行python程序需要指定一个函数为入口函数. application = sae.cr ...
- python 学习笔记八 进程和线程 (进阶篇)
什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执 ...
- python多线程与多进程
由于python的内存回收机制不是线程安全的,所以就有了GIL保证每个进程内,同一时刻最多只有一个线程在运行. 于是,对于python的多线程来讲,其实同一时刻依然只有一个线程在运行.而且由于线程切换 ...
- Python核心编程--学习笔记--3--Python基础
本章介绍基本的Python语法.编程风格:并简要介绍标识符.变量和关键字,以及变量占用内存的分配和回收:最后给出一个较大的Python样例程序来体验这些特性. 1 语句和语法 1.1 注释 可以在一行 ...
随机推荐
- Ubuntu通过Apache安装WebDav
使用KeePass保存密码,在个人服务器上安装WebDav协议. # 安装Apache2服务器 sudo aptitude install -y apache2 # 开启Apache2中对WebDav ...
- 为Facebook messenger平台开发聊天机器人
介绍 在电子商务网上商店发明之前,我们总是有机会与销售代表或分销商在选择商品或服务时交谈.在进入数字世界后,这个领域变得沉默.这样对顾客方便吗?我认为不是.向销售代表或经销商询问他们想要的产品或服务是 ...
- abp(net core)+easyui+efcore实现仓储管理系统——出库管理之二(五十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- Java泛型的协变与逆变
泛型擦除 Java的泛型本质上不是真正的泛型,而是利用了类型擦除(type erasure),比如下面的代码就会出现错误: 报的错误是:both methods have same erasure ...
- Django的安装和项目的启动
一.安装(安装最新LTS版): 1.命令行安装 pip install django==1.11.18 -i 源 2.pycharm 安装 二.创建项目 1.命令行创建 下面的命令创建了一个名为 ...
- xshell多窗口同时执行输入命令
- centos8安装及配置nfs4
一,用rpm检查是否有nfs-utils的包已安装 [root@localhost liuhongdi]# rpm -qa | grep nfs-utils nfs-utils-2.3.3-26.el ...
- linux mount挂载命令
[root@localhost src]# mount 查询系统中已经挂载的设备 [root@localhost src]# mount -a 依据配置文件 /etc/fstab的内容,自动挂载
- 【API管理 APIM】APIM中如何配置使用URL路径的方式传递参数(如由test.htm?name=xxx 变为test\xxx)
问题描述 在默认的URL传递参数中,我们使用的是https://test01.azure-api.cn/echo/resource?param1=sample¶m2=testname这 ...
- Redis基础——剖析基础数据结构及其用法
这是一个系列的文章,打算把Redis的基础数据结构.高级数据结构.持久化的方式以及高可用的方式都讲一遍,公众号会比其他的平台提前更新,感兴趣的可以提前关注,「SH的全栈笔记」,下面开始正文. 如果你是 ...