python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)
Python 是一门广受好评的编程语言,每个版本的更新都会对开发社区带来一定影响。近日,Python 3.8 已进入 beta 2 版本的测试中,各项新特性已经添加完毕,最终版本预计于今年 10 月发布。
从事计算机领域工作的读者朋友对 Python 编程语言应该非常熟悉了。这是一门广受好评的动态编程语言,其灵活和语法简易的特点使得这门语言在脚本工具、数据分析、Web 后端都有广泛的应用。Python 开发社区也非常活跃,3.x 的版本迭代速度非常快。2018 年 6 月底,Python 3.7 问世,之后 Python 3.8 的开发和测试工作也已经展开。近日,Python 软件基金会公开了 3.80b2 的说明文档,向公众展示了 beta 版本的测试进展,以及 Python 3.8 版本的新特性和功能改进。
目前,Python 3.8 的 beta 测试流程正在进行中。今年 6 月初,官方发布了第一个 beta 版本――Python 3.80b1,紧接着一个月后发布了 Python 3.80b2。第二个 beta 版本发布后,Python 3.8 新特性已经添加完毕。官方目前已公布最终版本的发布时间,预计在今年的 10 月份。
正文
Python 3.8 是Python语言的最新版本,它适合用于编写脚本、自动化以及机器学习和Web开发等各种任务。
现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变、内存共享、更有效的序列化和反序列化、改进的字典和更多新功能。
Python 3.8还引入了许多性能改进。总的来说,我们即将拥有一个更快、更精确、更一致和更现代的Python。
下面是Python 3.8的新功能和最重要的改变,我总结了一些开发中用得到的,常用的特性。
1.赋值表达式
Python 3.8最明显的变化就是赋值表达式,即:=操作符。赋值表达式可以将一个值赋给一个变量,即使变量不存在也可以。它可以用在表达式中,无需作为单独的语句出现。
上例中,如果变量line不存在则会被创建,然后将file.readline()的返回值赋给它。然后检查line是否为"end"。如果不是,则读取下一行,保存在line中,然后继续测试。
赋值表达式遵循了Python一贯简洁的传统,就像列表解析式一样。其目的在于避免在特定的Python编程模式中出现一些枯燥的样板代码。例如,上述代码用一般写法需要多写两行代码。
2.仅通过位置指定的参数
仅通过位置指定的参数是函数定义中的一个新语法,可以让程序员强迫某个参数只能通过位置来指定。这样可以解决Python函数定义中哪个参数是位置参数、哪个参数是关键字参数的模糊性。
仅通过位置指定的参数可以用于如下情况:某个函数接受任意关键字参数,但也能接受一个或多个未知参数。Python的内置函数通常都是这种情况,所以允许程序员这样做,能增强Python语言的一致性。
Python文档中给出的例子如下:
符号 / 分隔了位置参数和关键字参数。在这个例子中,所有参数都是未知参数。在以前版本的Python中,z会被认为是关键字参数。但采用上述函数定义,pow(2, 10)和pow(2, 10, 5)都是正确的调用方式,而pow(2, 10, z=5)是不正确的。
3.支持f字符串调试
f字符串格式可以更方便地在同一个表达式内进行输出文本和值或变量的计算,而且效率更高。
输出4。
在f字符串表达式末未添加=可以输出f表达式本身的值,后面是计算后的值
输出为x+1=4。
4.多进程共享内存
在Python 3.8中,multiprocessing模块提供了SharedMemory类,可以在不同的Python进城之间创建共享的内存区域。
在旧版本的Python中,进程间共享数据只能通过写入文件、通过网络套接字发送,或采用Python的pickle模块进行序列化等方式。共享内存提供了进程间传递数据的更快的方式,从而使得Python的多处理器和多内核编程更有效率。
共享内存片段可以作为单纯的字节区域来分配,也可以作为不可修改的类似于列表的对象来分配,其中能保存数字类型、字符串、字节对象、None对象等一小部分Python对象。
5.Typing模块的改进
Python是动态类型语言,但可以通过typing模块添加类型提示,以便第三方工具验证Python代码。Python 3.8给typing添加了一些新元素,因此它能够支持更健壮的检查:
final修饰器和Final类型标注表明,被修饰或被标注的对象在任何时候都不应该被重写、继承,也不能被重新赋值。
Literal类型将表达式限定为特定的值或值的列表(不一定是同一个类型的值)。
TypedDict可以用来创建字典,其特定键的值被限制在一个或多个类型上。注意这些限制仅用于编译时确定值的合法性,而不能在运行时进行限制。
6.新版本的pickle协议
Python的pickle模块提供了一种序列化和反序列化Python数据结构或实例的方法,可以将字典原样保存下来供以后读取。不同版本的Python支持的pickle协议不同,而最新版本的支持范围更广、更强大、更有效的序列化。
Python 3.8引入的第5版pickle协议可以用一种新方法pickle对象,它能支持Python的缓冲区协议,如bytes、memoryviews或Numpy array等。新的pickle避免了许多在pickle这些对象时的内存复制操作。
NumPy、Apache Arrow等外部库在各自的Python绑定中支持新的pickle协议。新的pickle也可以作为Python 3.6和3.7的插件使用,可以从PyPI上安装。
7.可反转字典
Python3.6中重写了字典,其使用了PyPy项目贡献的一个新实现。除了更快、更紧凑之外,现在的字典还会继承元素的顺序――元素会按照添加的顺序排列,就像列表一样。Python 3.8还允许在字典上使用reversed()。
8.性能改进
许多内置方法和函数的速度都提高了20%~50%,因为之前许多函数都需要进行不必要的参数转换。
一个新的opcode缓存可以提高解释器中特定指令的速度。但是,目前实现了速度改进的只有LOAD_GLOBAL opcode,其速度提高了40%。以后的版本中也会进行类似的优化。
文件复制操作如shutil.copyfile()和shutil.copytree()现在使用平台特定的调用和其他优化措施,来提高操作速度。
新创建的列表现在平均比以前小了12%,这要归功于列表构造函数如果能提前知道列表长度的情况下进行的优化。
Python 3.8中向新型类(如class A(object))的类变量中的写入操作变得更快。operator.itemgetter()和collections.namedtuple()也得到了速度优化。
9.Python C API和CPython实现
Python最近的版本在CPython(C语言编写的Python的参考实现)中使用的C API重构方面下了很大功夫。到目前为止这些工作还在不断添加,现有的成果包括:
Python初始化配置(Python Initialization Configuration)有了个新的C API,可以实现对Python初始化例程更紧密的控制和更详细的反馈。如此一来,将Python运行时嵌入到其他应用程序中就会更容易,也可以以编程方式给Python程序传递启动参数。新的API还确保了所有Python配置控制都有一个单一的、一致的位置,因此以后的改变(如Python的新的UTF-8模式)也更为容易。
CPython的另一个新的C API――"vectorcall"调用协议――可以实现针对Python内部方法更快的调用,而无需创建临时对象。该API依然不稳定,但已有了明显的改善。该API计划在Python 3.9中成熟。
Python运行时的审计钩子为Python运行时提供了两个API,可以用来勾住事件,从而保证测试框架、日志和审计系统等外部工具能够监视到它们。
10.如何下载Python 3.8
到此这篇关于Python 3.8 新功能来一波(大部分人都不知道)的文章就介绍到这了,更多相关Python 3.8 新功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
python3.7和3.8的区别-Python 3.8 新功能来一波(大部分人都不知道)相关推荐
- 以下哪个不是python财经数据接口工具_这7种Python的全新玩法,大部分人都不知道!...
Python第三方模块众多,下面我介绍一些比较实用而又有趣的模块,主要分为爬虫.数据处理.可视化.机器学习.神经网络.股票财经.游戏这7个方面,主要内容如下: 创一个小群,供大家学习交流聊天 如果有对 ...
- 用python画漂亮图-大部分人都不知道-Python竟能画这么漂亮的花,帅呆了
阅读本文大概需要3分钟 关于函数和模块讲了这么久,我一直想用一个好玩有趣的小例子来总结一下,同时也作为实战练习一下. 趣味编程其实是最好的学习途径,回想十几年前我刚毕业的时候,第一份工作就给手机上写a ...
- python3.8.5怎么用-Python 3.8 新功能大揭秘【新手必学】
最新版本的Python发布了!今年夏天,Python 3.8发布beta版本,在2019年10月14日,第一个正式版本已准备就绪.现在,我们都可以开始使用新功能并从最新改进中受益. Python 3. ...
- python大神是什么样的_【Python大神秘籍Top10】这些窍门99%的人都不知道
原标题:[Python大神秘籍Top10]这些窍门99%的人都不知道 来源:GitHub 作者:Rafe Kettler 编译:三石 [新智元导读]Python神奇方法是指一些允许在自定义类中增加&q ...
- python语言有什么用-Python到底有什么用?为什么那么多人都在学Python?
原标题:Python到底有什么用?为什么那么多人都在学Python? 现如今无论是工作汇报.产品设计.后台设计甚至是数据大屏,越来越多的行业都离不开与数据打交道! Excel作为数据必备工具,一直以来 ...
- python高端玩法_这7种Python的全新玩法,一般人都不知道!
Python第三方模块众多,下面我介绍一些比较实用而又有趣的模块,主要分为爬虫.数据处理.可视化.机器学习.神经网络.股票财经.游戏这7个方面. 主要内容如下: 1.爬虫:相信大部分人都用Python ...
- python3.7和3.8的区别-Python 3.8 有什么新变化
改进的模块¶ ast¶ AST 节点现在具有 end_lineno 和 end_col_offset 属性,它们给出节点结束的精确位置. (这只适用于具有 lineno 和 col_offset 属性 ...
- 最新技术资讯,你必须知道的Python 3.9新功能
Python 3.9,来了! 过去一年,来自世界各地的开发者们一直在致力于Python3.8的改进.Python 3.9 beta版本已经存在了一段时间,第一个正式版本于2020年10月5日发布. 每 ...
- Python 3.8 新功能大揭秘
从功能强大的新赋值语法到底层大变动,Python 3.8 迈向更现代的 Python. 作者 | Serdar Yegulalp 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNne ...
最新文章
- [BZOJ 2839] 集合计数
- 马尔可夫“折棍子”过程 Markovian Stick-breaking Process 在直方图平滑中的应用
- 编写脚本隐藏托盘图标_【Electron-Playground系列】托盘篇
- java 数组 push pop_JavaScript学习笔记:数组的push()、pop()、shift()和unshift()方法
- 美征信巨头Equifax因Struts漏洞导致数据大规模泄露
- 模拟IE登录一个需要(windows身份)验证的网站
- boost::gregorian模块实现localization的测试程序
- ASP.NET下载网络图片
- 解决Visual Studio “无法导入以下密钥文件”的错误
- [网摘].NET 程序员十种必备工具-概述
- 不结婚不生孩子,离婚率15连涨,中国正在步入“低欲望社会”吗?
- 05-03 docker 常用命令
- 树莓派安装FFTW,linux安装库不生成.so库,拷贝.so .a,按时间查看文件的命令
- 小白一步步:EntLib5.0 - Data Access 最简练习
- 集成电路可测性设计DFT技术入门概论--MBIST技术报告
- UVALive 6437
- 信息化、数字化、数智化
- Android实现网络下载二(多任务下载--支持断点续传)
- HP C7000刀片服务器学习三
- jquery实现导航吸顶效果
热门文章
- elasticsearch _field_stats 源码分析
- python 读取二进制文件 转为16进制输出
- 有关MongoDB数据库设计的问题
- Linux修改UTF8字符编码
- Java NIO (五) 管道 (Pipe)
- 转载-对js中new、prototype的理解
- WinForm窗体设置
- 刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别
- 第一周周四DailyReporting——PM(李忠)
- azure container 的命名规则