python 3.9特性,开发者应该知道的Python 3.9新特性

导读:Python 3.9来了,有哪些新特性值得学,值得用?

bd2664ce6303b40c1b0e8a58b8eeb35e.png

Python 2.9(5.10.2020)已经发布了一段时间,最后一个Alpha版(3.9.0a5)近期发布了测试版。开发者应该看新版有哪些新功能,改进和修复。

安装测试版

本节尝鲜安装Python 3.9,但不要破坏稳定版本的Python解释。命令如下:

wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0a5.tgztar xzvf Python-3.9.0a5.tgzcd Python-3.9.0a5./configure --prefix=$HOME/python-3.9.0a5makemake install$HOME/python-3.9.0a5/bin/python3.9

运行以上指令后,我们会收到IDLE和欢迎消息。类似于如下:

Python 3.9.0a5 (default, Apr 16 2020, 18:57:58)[GCC 9.2.1 20191008] on linuxType "help", "copyright", "credits" or "license" for more information.

新的字典运算符

最明显的新特性大概是新的字典合并运算符 _ 或 .

从现在开始,你有3个选项来合并字典:| |=

来看如下代码:

# Dictionaries to be merged:d1 = {"x": 1, "y": 4, "z": 10}d2 = {"a": 7, "b": 9, "x": 5}# Expected output after merging{'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}# ^^^^^ Notice that "x" got overridden by value from second dictionary# 1. Optiond = dict(d1, **d2)# 2. Optiond = d1.copy()  # Copy the first dictionaryd.update(d2)   # Update it "in-place" with second one# 3. Optiond = {**d1, **d2}

上面第一个选项函数使用初始化字典,第一个参数是普通字典,第二个是Key/Value对的列表。在此种情况下,只是使用运算符解压缩到另一个字典。

dict(iterable, **kwargs)**

第二种方法是使用第二个字典来更新第一个字典。因为此字典在原位上修改,我们需要将第一个副本复制到变量中,以避免修改原始变量。

第三种方法也是最后一个。在我看来,最干净的解决方案就是使用字典解包和解压缩两个变量到一个结果。

d1 d2 d

是的,即便以上选项是完全等价的,我们现在使用新的运算符提供新的解决方案。

|

# Normal mergingd = d1 | d2# d = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}# In-place mergingd1 |= d2# d1 = {'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}

可以看到,此段代码的第一个示例与前面的运算符解包(d = {**d1, **d2})很相似。第二个示例可用于立即合并,其中原始变量d1被第二个操作数d2的值立即更新。

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 IPv6Addressaddr = IPv6Address('ff02::fa51%1')print(addr.scope_id)# "1" - interface-local IP address

但是,使用IPv6范围时应注意一件事。使用基本的Python运算符进行比较时,范围不同的两个地址不是相等的。

新的math模块

同时,在math模块中,添加或改进了许多其他功能。从对一个现有功能的改进开始:

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 multiplemath.lcm(4, 8, 5)# 40余下的2个新函数紧密相关,那就是math.nextafter和math.ulp:# Next float after 4 going towards 5math.nextafter(4, 5)4.000000000000001# Next float after 9 going towards 0math.nextafter(9, 0)8.999999999999998# Unit in the Last Placemath.ulp(1000000000000000)0.125math.ulp(3.14159265)4.440892098500626e-16

math.nextafter(x, y)功能是非常简单-如果x是浮点数,则y也会同时考虑到浮点数精度。

新的字符串函数

字符串添加了两个新的便捷功能:

# Remove prefix"someText".removeprefix("some")# "Text"# Remove suffix"someText".removesuffix("Text")# "some"

当然你仍然可以使用string[len(prefix):]前缀和string[:-len(suffix)]后缀来实现该功能。但如果经常执行该操作,新的函数就该派上用场了。

小奖励

最后送大家一个Python 3.9甜点。实际上,它已经将HTTP状态码添加到了http.HTTPStatus上了。如下代码:

import httphttp.HTTPStatus.EARLY_HINTS# http.HTTPStatus.TOO_EARLY# http.HTTPStatus.IM_A_TEAPOT#

没事的时候可以来看看这些状态码,我觉得可能你也不知道啥时候能用上它们。也许在生产服务器返回像 http.HTTPStatus.IM_A_TEAPOT 的状态时,可能会提高程序员的生活质量。

小结

这里只是一部分Python 3.9的更新内容,也并非所有更新与你的日常编程有关,但一部分相信会帮助你提高效率。

Python 3.9目前还处于Alpha阶段,稳定版本大概在10月份正式推出,这段时间还会有一些更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python一维数组定义,python一维数组保存

python中向一维数组添加元素的方法例如爬虫爬取到的数据只有[b11dab7a2f48d131fc9c26678636294381aedd41,供参考: old_array [b11dab7a2f48d131fc9c26678636294381aedd41, 5183353435e0a7b1681010bd71d3d7791492685e]new_array [magnet:?xturn:btih: …

mount NTFS FOR RHEL5

2019独角兽企业重金招聘Python工程师标准>>> USB的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的。 1. 先别插U盘,/sbin/lsmod看是否有usb-storage。如果没有的话: cd /lib/modules/2.4.20-8/kernel/drivers/usb for v i…

[C1] 优化 C1FlexGrid 单元格边框

一 优化理由 如下图所示,如果按照 C1FlexGrid 自带的单元格边框设置,即对每个单元格的 CellStyle 的 BorderThickness 进行设置,会得到如下图的效果: 其中,明显可以看到如果两个相邻的单元格同时设置了那条相邻的边&a…

Source Insight经典教程

From: http://blog.21ic.com/user1/4251/archives/2008/53650.html Source Insight实质上是一个支持多种开发语言(java,c ,c 等等)的编辑器,只不过由于其查找、定位、彩色显示等功能的强大,常被我们当成源代码阅读工具使用。 作…

ThinkPHP整合百度Ueditor图文教程

ThinkPHP整合百度Ueditor图文教程 ThinkPHP整合百度Ueditor,基于黄永成老师的视频说明的申明:最好大家都能写绝对路径的都写好绝对路径比如:window.UEDITOR_HOME_URL 他在教程里面已经说了的,我就不再次说了啊,就一笔…

树莓派Raspberry 操作GPIO--LED

一、 安装 wiringPi : sudo apt-get install wiringPi 二、查看安装版本 三、查看端口 四、创建源文件 touch myled.c 五、编写源代码 vi myled.c 使用cat myled.c 查看 六、编译和链接wiringPi库 七、运行

php json传输被过滤,php-the_content过滤器,用于将自定义字段添加到JSON响应

我对这个用于显示JSON API中的自定义字段的the_content过滤器感到绝望.我正在使用此插件http://wordpress.org/plugins/json-rest-api/从自定义帖子类型获得JSON响应.这些自定义帖子类型具有我必须在移动应用程序中显示的自定义字段.为了实现这一点,我编写了以下代码,该代码使用…

飞凌开发板 cramfs 镜像文件修改

From: http://blog.csdn.net/ex_net/article/details/7247111 CRAMFS文件系统是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3.    如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先得把flash上的映像文件全…

html 后# 号的作用,及html 如何传参

2019独角兽企业重金招聘Python工程师标准>>> 经常在 网上看到一些静态网页后加着 #XXX 如http://www.family168.com/tutorial/springsecurity3/html/introduction.html#spring-security-core 这种形式。这个#spring-security-core 起的作用就是在 introduction 中定…

[发布] 矩阵乘法及其对于编程求斐波那契数列的某一项的应用

需要PDF的读者可以向我索要。 如果发现有翻印与用于商业用途,将予追究。 编者注:本文中如果没有特殊说明,除法均只取整数部分,忽略小数部分。 感谢大家对我的支持!同时感谢ysy大聚聚。转载于:https://www.cnblogs.com…

oracle新建用户sql局域,oracle 新建数据库,及创建用户,表空间,sqlplus导入导出数据库...

oracle11G新建数据库:默认下一步:默认下一步:默认下一步:填写数据库名下一步:默认下一步:完成,再按指示确定,就完成了数据库的创建。数据库创建完后,在oracle11G Net Man…

STM32项目中一种在线升级/应用升级OTA-IAP设计方案

STM32 OTA-IAP设计方案 OTA是Over-the-Air的简写,即空中下载技术,通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在…