您的位置:首页 > 科技 > 名人名企 > Python 3.8 究竟要不要升级?用过之后的小哥这样说

Python 3.8 究竟要不要升级?用过之后的小哥这样说

2019-10-24 来源:雷锋网  浏览:    关键词:python,python函数,python实例

雷锋网 AI 开发者按:距 Python 3.8 稳定版正式发布曾经过去了小半个月,不少 Python 常驻用户曾经将 Python 更新到了 3.8 版本,也有一些朋友担忧代码运转兼容性等问题,依然坚硬在 Python3.7 中。

那么,究竟要不要更新到 Python 3.8?新版本有哪些特性?它能为程序猿们带来怎样的收益?一位外国的 python 忠实小哥哥发了一篇文章,用众多实例细致解说了 Python 3.8 特别的新功用。雷锋网(公众号:雷锋网) AI 开发者也将其更多功用整理编译到后文中,希望这篇文章能辅佐你更好的了解 Python 3.8。

海象(walrus )运算符

最近,python 社区发布了该言语的 3.8 版本。作为python 的超级粉丝 ,我研讨了发行阐明,有一个特别的操作符惹起了我的留意,该运算符称为 walrus 运算符(:=)或赋值表达式运算符。

这个新运算符(:=)使我们能够将值赋给表达式中的变量。这个符号有点像海象的眼睛和獠牙(因而也称为「海象运算符」)。

往常让我们看看下面的代码段:

在这个代码段中,我们将调用函数 len()两次。有什么办法能够避免重新调用以进步可读性吗?是的,在改进代码之后,我们得到了以下结果:

还有进一步改进的余地吗?我们能否能够避免在单独的行中为变量「country_size」赋值?在 Python3.8 中引入的 walrus 运算符能够解救我们,它使我们能够在 if 语句自身中声明和赋值:

让我们进一步讨论这个运算符的才干。

代码行数与复杂度的均衡

让我们看看下面的例子:

多次调用本钱昂扬的函数

在上面的示例中,经过多次调用运转本钱高的函数来填充列表。但在 walrus 运算符的辅佐下,我们能够将结果存储在一个变量中,并在进一步的计算中重用同一个变量,从而避免多次调用 get_count()函数。下面是运用 walrus 运算符后的示例:

运用 walrus 运算符避免多个函数调用

从上面的例子能够看出,walrus 运算符减少了代码行,使代码更具可读性,从而简化了审阅者的工作。此外,它在代码行数和代码复杂度之间抵达了更好地均衡。

在上面的例子中,我们正在执行多个操作。最初,我们创建了一个空列表,然后迭代一个 id 列表,并经过检查结果能否有效来填充该列表。

经过 walrus 运算符,我们能够简化上面的代码,并将一切内容放在一行中。

运用者需避免对 walrus 运算符的错误了解

在处置一个大文件时,我们将文件分红块并读取。每次读取块时,都会检查该值,并将其作为 while 循环中的终止条件,代码如下:

经过运用 walrus 运算符,我们能够在 while 循环的表达式中读取并分配所读数值,这样还能够避免在 while 循环外显式声明变量。下面是一个例子:

正则表达式匹配是一个需求两个步骤的过程。在第一步中,我们检查能否发作匹配,在下一步中,我们提取子组:

从上面的代码能够看出,假如匹配,我们正在重新计算 re.match(info),这会依据数据降低程序的速度。

上述代码应用 walrus 运算符能够重写如下,并且能够避免重新计算:

哪里不能用 walrus 运算符?

如上所示,我们不能将=运算符与:=运算符一同运用,walrus 运算符只能是表达式的一部分。

一个面向大众的工具,必需得到发明者圭多·范·罗森(Guido van Rossum)和他所选的代表们的批准。因而,盘绕 walrus 运算符的争论很多,其中部分内容如下:

开发人员提出了许多替代「:=」,例如表达式->称号、称号->表达式、{表达式} 称号等。很少有运用现有关键字的倡议,而其他运用新的运算符的倡议。

这个特性不会向后兼容,也不会在以前的 python 版本上运转。

关于 walrus 运算符的争论

关于 walrus 运算符的细致引见就是这些,除此之外,Python3.8 也有其它新功用——

这是新增的一个函数形参语法,用来指明某些函数形参必需运用仅限位置而非关键字参数的方式。这种标志语法与经过 help() 所显现的运用 Larry Hastings 的 Argument Clinic 工具标志的 C 函数相同。

在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 能够是位置形参或关键字形参,而 e 或 f 请求为关键字形参:

以下均为合法的调用:

但是,以下均为不合法的调用:

这种标志方式的一个用例是它允许纯 Python 函数完好模仿现有的用 C 代码编写的函数的行为。另一个用例是在不需求形参称号时扫除关键字参数。例如,内置的 len() 函数的签名为 len(obj, /)。

除了这一点,在 Python3.8 中,能够用 / 来表示必需经过仅位置参数之前的参数。这极大中央便了之前在自定义函数中,开发者没有简单的办法指定参数为仅位置参数的问题。

用于已编译字节码文件的并行文件系统缓存

调试构建运用与发布构建相同的 ABI

不论是在发布方式还是调试方式下构建,Python 往常都运用相同的 ABI。在   Unix 上,当 Python 以调试方式构建时,往常能够加载以发布方式构建的 C  扩展和运用稳定 ABI 构建的 C 扩展

f 字符串支持一个便当的 = 阐明符中止调试

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:service@qeerd.com,投稿邮箱:tougao@qeerd.com

声明:本站所有新闻及新闻图片来源于其他网站,如有侵权,请及时联系我们!

客户服务    关于我们    版权声明   

版权所有:北京企迪信息技术有限公司

ICP备案号: 京ICP备10046945号-37

Copyright 2017 今日华北 All Rights Reserved.联系电话:010-61409871,QQ:3529009033