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,一经查实,立即删除!

相关文章

React开发(193):react无障碍使用程序获取焦点第一种

class CustomTextInput extends React.Component {constructor(props) {super(props);// 创造一个 textInput DOM 元素的 ref this.textInput React.createRef(); }render() {// 使用 ref 回调函数以在实例的一个变量中存储文本输入 DOM 元素//(比如&#xff…

Oracle发布更新使数据库性能优化达到75%

甲骨文公司今天在甲骨文全球技术与应用大会(Oracle OpenWorld)上宣布,为优化Oracle软件和硬件而推出一款快速、现代和可靠的Linux内核——Oracle Unbreakable企业级内核(Unbreakable Enterprise Kernel)。 Oracle Unbr…

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…

NFS服务器配置

From: http://hi.baidu.com/hp_roc/blog/item/2e461103588275dc277fb516.html 【实验内容】 NFS(Network File System)主要实现了Linux系统之间的资源共享。它是将某台Linux主机的若干目录共享出来,交由其他Linux主机直接使用。本实验用于通…

[C1] 优化 C1FlexGrid 单元格边框

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

php fakepath,在文件上载中获取真实路径而不是“fakepath”

因为我的目标是让最终用户看到上传的文件名,然后通过php mail()函数发送,所以我所做的就是:在JS文件中旧功能:var fileuploadinit function(){$(#career_resume).change(function(){var pathwithfilename $(#career_resume).val();$(.uploadedfile).html("Uploaded File…

Source Insight经典教程

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

Android 中文 API (29) —— CompoundButton

前言本章内容是android.widget.CompoundButton,翻译来自德罗德,再次感谢德罗德 !期待你一起参与Android API 的中文翻译,联系我over140gmail.com。 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://w…

php object oriented,PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】...

本文实例讲述了PHP面向对象(Object-oriented programming,OOP)基础。分享给大家供大家参考,具体如下:我们可以使用接口(interface),指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容,我们可以通…

Java虚拟机-内存分配策略

Java技术体系中所提倡的自动内存管理策略最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存; 几条普遍的分配规则:1、对象优先在Eden区分配年轻代分为三个区:1个Eden区2个Survivor区。大部分对象在Ed…

Source Insight常用的快捷键

From: http://blog.21ic.com/user1/4251/archives/2008/53650.html Source Insight常用的快捷键: Ctrl :Jump to definition Ctrl/ :Look up reference F3 : search backward F4 : search forward F5: go to Line F7 :Look up symbols F8 :Look up local symbols F…

ubuntu 安装fcitx输入法(3.6和4.0bate)

Ubuntu 10.10默认安装的输入法是ibus,在安装中文语言包(http://blog.csdn.net/wangjingfei/archive/2010/05/21/5614203.aspx)之后就可以使用。但是查看了一些网上的资料说是ibus有很多问题,例如会造成Linux QQ崩溃等。不知道是ibus的问题还是…

php在菜单栏里加子菜单,WordPress后台添加子菜单add_submenu_page()

接上文:WordPress后台添加顶级菜单add_menu_page(),今儿再分享一下在 wordpress 后台侧边栏添加子菜单的方法,用到的函数是:add_submenu_page()函数用法:add_submenu_page( $parent_slug, $page_title, $menu_title, $…

C#String详解

字符串:stringLength - 字符串的长度。 TrimStart() 压缩空格即消除字符串开始空格TrimEnd() 消除结尾空格Trim() 同时消除开头和结尾空格。注:中间空格不消除,因为英文单词之间用空格隔开。 ToUpper() 全部变大写ToLower() 全部变小写 Repl…

linux modprobe命令参数及用法详解--linux加载模块命令

From: http://www.linuxso.com/command/modprobe.html modprobe(module probe) 功能说明:自动处理可载入模块。 语  法:modprobe [-acdlrtvV][--help][模块文件][符号名称 符号值] 补充说明:modprobe可载入指定的个别模块,…

fedora下安装pps

fedora下安装pps成功,官方下载的deb包解压,然后手动安装。大致讲一下方法,如下:到官方下载deb包,右键解压后,进入解压的文件夹,将两个tar包解压,得到etc,opt,usr,三个文件夹&#xf…