点击我爱计算机视觉标星,更快获取CVML新技术


本文转载自新智元(ID: AI_era)。


  新智元报道  

来源:.python.org

编辑:肖琴

【新智元导读】Python 官网静悄悄地发布了一则大消息:正式发布 Python 3.8.0!新版本较3.7版增加了一大波新功能和优化。

今天,Python 官网宣布,正式发布 Python 3.8.0

Python 3.8.0 现已推出。

代表 Python 开发社区和 Python 3.8 发布团队,我们很高兴地宣布 Python 3.8.0 现在已经可以使用。

Python 3.8.0 是 Python 语言的最新正式版,包含许多新功能和优化。

Python 的大多数第三方库也应该很快就会支持 3.8.0 软件包。

有关 3.8 版本功能的更多信息,请参阅 “Python 3.8 新特性” 文档。所有更改的详细信息都可以在更改日志中找到。

从 2019 年 12 月开始,3.8 系列的维护版本将定期每两个月发布一次。

我们希望您喜欢 Python 3.8!

感谢所有帮助 Python 开发和这些发布的志愿者!欢迎通过志愿或组织捐赠支持 Python 软件基金会的工作。

Python 3.8.0 重要新特性&优化

那么,这次新发布的 Python 3.8.0 有哪些重要的改进呢?以下是是 Python 3.8 相比 3.7 的新增特性。

  • PEP 572,赋值表达式

  • PEP 570,仅限位置形参

  • PEP 587,Python 初始化配置(改进的嵌入)

  • PEP 590,Vectorcall:用于 CPython 的快速调用协议

  • PEP 578, Python Runtime Audit Hooks

  • PEP 574,具有外部数据缓冲区的 pickle 协议 5

  • 与打字相关:PEP 591(最终限定词),PEP 586(文学类型)和 PEP 589(TypedDict)

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

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

  • f - 字符串支持 = 用于自动记录表达式和调试文档

  • 在 Windows 上,默认 asyncio 事件循环现在是 ProactorEventLoop

  • 在 macOS 上,spawn 启动方法默认使用 multiprocessing

  • multiprocessing 现在可以使用共享内存段来避免进程之间的酸洗成本

  • typed_ast 被合并回 CPython

  • LOAD_GLOBAL 速度加快了 40%

  • pickle 现在默认使用协议 4,提高了性能

接下来,我们重点来看几个(来自Python 3.8 文档)。

赋值表达式

Python 3.8.0 有一个新的语法 :=,它将值赋给一个更大的表达式中的变量。它被亲切地称为 “海象运算符”(walrus operator),因为它长得像海象的眼睛和象牙。

海象

这个 “海象运算符” 在某些时候可以让你的代码更整洁,比如:

在这个示例中,赋值表达式可以避免调用 len () 两次:

if (n := len(a)) > 10:print(f"List is too long ({n} elements, expected <= 10)")

类似的益处还可出现在正则表达式匹配中需要使用两次匹配对象的情况中,一次检测用于匹配是否发生,另一次用于提取子分组:

discount = 0.0
if (mo := re.search(r'(\d+)% discount', advertisement)):discount = float(mo.group(1)) / 100.0

此运算符也适用于配合 while 循环计算一个值来检测循环是否终止,而同一个值又在循环体中再次被使用的情况:

# Loop over fixed length blocks
while (block := f.read(256)) != '':process(block)

另一个值得介绍的用例出现于列表推导式中,在筛选条件中计算一个值,而同一个值又在表达式中需要被使用:

[clean_name.title() for name in namesif (clean_name := normalize('NFC', name)) in allowed_names]

请尽量将海象运算符的使用限制在清晰的场合中,以降低复杂性并提升可读性。

了解详情:https://www.python.org/dev/peps/pep-0572

(由 Morehouse 在 bpo-35224 中贡献。)

仅限位置形参

新增了一个函数形参语法 / 用来指明某些函数形参必须使用仅限位置而非关键字参数的形式。这种标记语法与通过 help () 所显示的使用 Larry Hastings 的 Argument Clinic 工具标记的 C 函数相同。

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

def f(a, b, /, c, d, *, e, f):print(a, b, c, d, e, f)

以下均为合法的调用:

f(10, 20, 30, d=40, e=50, f=60)

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

f(10, b=20, c=30, d=40, e=50, f=60)   # b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60)           # e must be a keyword argument

这种标记形式的一个用例是它允许纯 Python 函数完整模拟现有的用 C 代码编写的函数的行为。例如,内置的 pow () 函数不接受关键字参数:

def pow(x, y, z=None, /):"Emulate the built in pow() function"r = x ** yreturn r if z is None else r%z

另一个用例是在不需要形参名称时排除关键字参数。例如,内置的 len () 函数的签名为 len (obj, /)。这可以排除如下这种笨拙的调用形式:

len(obj='hello')  # The "obj" keyword argument impairs readability

另一个益处是将形参标记为仅限位置形参将允许在未来修改形参名而不会破坏客户的代码。例如,在 statistics 模块中,形参名 dist 在未来可能被修改。这使得以下函数描述成为可能:

def quantiles(dist, /, *, n=4, method='exclusive')...

由于在 / 左侧的形参不会被公开为可用关键字,其他形参名仍可在 **kwargs 中使用:

>>> def f(a, b, /, **kwargs):
...     print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3)         # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}

这极大地简化了需要接受任意关键字参数的函数和方法的实现。例如,下面是 collections 模块中的代码摘录:

class Counter(dict):def __init__(self, iterable=None, /, **kwds):# Note "iterable" is a possible keyword argument

了解详情:https://www.python.org/dev/peps/pep-0570

(由 Pablo Galindo 在 bpo-36540 中贡献。)

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

新增的 PYTHONPYCACHEPREFIX 设置 (也可使用 -X pycache_prefix) 可将隐式的字节码缓存配置为使用单独的并行文件系统树,而不是默认的每个源代码目录下的 __pycache__ 子目录。

缓存的位置会在 sys.pycache_prefix 中报告 (None 表示默认位置即 __pycache__ 子目录)。

(由 Carl Meyer 在 bpo-33499 中贡献。)

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

发布构建和调试构建现在都是 ABI 兼容的:定义 Py_DEBUG 宏不会再启用 Py_TRACE_REFS 宏,它引入了唯一的 ABI 不兼容性。Py_TRACE_REFS 宏添加了 sys.getobjects () 函数和 PYTHONDUMPREFS 环境变量,它可以使用新的 ./configure --with-trace-refs 构建选项来设置。(由 Victor Stinner 在 bpo-36465 中贡献。)

f - 字符串支持 = 用于自动记录表达式和调试文档

增加 = 说明符用于 f-string。形式为 f'{expr=}' 的 f - 字符串将扩展表示为表达式文本,加一个等于号,再加表达式的求值结果。例如:

>>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

通常的 f - 字符串格式说明符 允许更细致地控制所要显示的表达式结果:

>>> delta = date.today() - member_since
>>> f'{user=!s}  {delta.days=:,d}'
'user=eric_idle  delta.days=16,075'

= 说明符将输出整个表达式,以便详细演示计算过程:

>>> print(f'{theta=}  {cos(radians(theta))=:.3f}')
theta=30  cos(radians(theta))=0.866

(由 Eric V. Smith 和 Larry Hastings 在 bpo-36817 中贡献。)

PEP 587: Python 初始化配置 

PEP 587 增加了一个新的 C API 用来配置 Python 初始化,提供对整个配置过程的更细致控制以及更好的错误报告。

Vectorcall: 用于 CPython 的快速调用协议 

添加 "vectorcall" 协议到 Python/C API。它的目标是对已被应用于许多类的现有优化进行正式化。任何实现可调用对象的扩展类型均可使用此协议。

此特性目前为暂定状态,计划在 Python 3.9 将其完全公开。

了解详情:https://www.python.org/dev/peps/pep-0590

(由 Jeroen Demeyer 和 Mark Shannon 在 bpo-36974 中贡献。)

具有外部数据缓冲区的 pickle 协议 5

当使用 pickle 在 Python 进程间传输大量数据以充分发挥多核或多机处理的优势时,非常重要一点是通过减少内存拷贝来优化传输效率,并可能应用一些定制技巧例如针对特定数据的压缩。

pickle 协议 5 引入了对于外部缓冲区的支持,这样 PEP 3118 兼容的数据可以与主 pickle 流分开进行传输,这是由通信层来确定的。

了解详情:https://www.python.org/dev/peps/pep-0574

(由 Antoine Pitrou 在 bpo-36785 中贡献。)

更多详细特性,请查阅Python 3.8.0文档:

https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html

连续三年夺冠,Python为什么这么受欢迎?

Python 已经成为最受欢迎的编程语言。

在2019年度 IEEE Spectrum 编程语言排行榜中,Python 不负众望,稳居榜首,而且连续三年夺冠。

IEEE Spectrum 2019 十大编程语言排行如下

Python 的流行在很大程度上是受了大量可用专用库的驱动,特别是在人工智能领域中。事实上,Keras 库对深度学习开发人员影响很大。但深度学习并不是 Python 产生巨大的影响的唯一领域,微处理器计算能力的显著提高意味着嵌入式版本的 Python:如 CircuitPython 和 MicroPython,正越来越受制造商的欢迎。

而 Python 为何能连续三年夺冠?

Python 的高速发展主要原因是软件工程的蓬勃发展,它吸引了许多零基础的初学者。Java 的编程方法对于初学者来说太冗长了,单单想要完全理解和运行在 Java 中的 “hello world” 这样的简单程序,你就需要去了解类、静态方法和包。在 C 语言中,这要简单一些,但是在内存管理上还是会出现一些问题。但在 Python 这里,就只是一行代码的事。所以,Python 越来越流行,被越来越多的开发者使用。

对初学者友好,是 Python 用户快速增加的原因之一。如果你还不了解Python,那么最近微软推出的一套免费入门教程是很好的选择。

视频地址:

https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6

这套视频教程名为 Python for Beginners,由微软高级项目经理 Christopher Harrison、以及微软 AI Gaming 的商业开发经理 Susan Ibach 共同讲解,在课程中加入了他们对 Python 的见解,一共有 44 个视频。

这套课程最大的特定是轻松简洁,一上线就很受欢迎,5 天视频播放量超 25 万,更一度登上 GitHub 趋势榜第一名。

我应该升级到 Python 3.8 吗?

很简单,如果你想尝试前面介绍的 Python 3.8 的任何新功能,那么就应该升级到 Python 3.8。像 pyenv 和 Anaconda 这样的工具可以很容易地并排安装多个版本的 Python。或者,你也可以运行官方的 Python 3.8 Docker 容器。尝试使用一下 Python 3.8,肯定会眼前一亮~

不过,是否应该将生产环境升级到 Python 3.8 呢?这需要考虑你的项目是否依赖 Python 3.8 的新功能。升级环境以运行 Python 3.8 是非常安全的,而且也能利用新版本中的优化。不过,如果你想保守一点,可以坚持到第一个维护版本(Python 3.8.1)发布时再升级。

如何评价 Python 3.8?欢迎文末留言讨论~

参考链接:

https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html


CV细分方向交流群

52CV已经建立多个CV专业交流群,包括:目标跟踪、目标检测、语义分割、姿态估计、人脸识别检测、医学影像处理、超分辨率、神经架构搜索、GAN、强化学习等,扫码添加CV君拉你入群,如已经为CV君其他账号好友请直接私信,

(请务必注明相关方向,比如:目标检测

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:805388940。

(不会时时在线,如果没能及时通过验证还请见谅)


长按关注我爱计算机视觉

Python 3.8.0 发布!相关推荐

  1. ofo 辟谣“月盈利百万”;苹果回应向腾讯传输数据;Python 3.8.0 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  2. Qt for Python 5.15.0发布

    本文翻译自Qt for Python 5.15.0 is out! 原文作者:Cristián Maureira-Fredes,Qt公司研发经理 校审:Mark Wang 大家好!我们非常高兴地宣布Q ...

  3. python3最新稳定版本-Python 3.9.0 稳定版发布

    新酷产品第一时间免费试玩,还有众多优质达人分享独到生活经验,快来新浪众测,体验各领域最前沿.最有趣.最好玩的产品吧~!下载客户端还能获得专享福利哦! 原标题:Python 3.9.0 稳定版发布 IT ...

  4. 支持delete吗_Spark Delta Lake 0.4.0 发布,支持 Python API 和部分 SQL

    Apache Spark 发布了 Delta Lake 0.4.0,主要支持 DML 的 Python API.将 Parquet 表转换成 Delta Lake 表 以及部分 SQL 功能. 下面详 ...

  5. python协程框架_FastPy3.0 发布,高性能 python 协程web框架

    FastPy3.0 发布了,FastPy是python领域一个高性能的web框架,底层封装gevent协程模型,使得python原生库操作mysql或者http时自动变成异步模式,使用上又具有djan ...

  6. Python 3.9.0 首个迭代版本发布了

    Python 3.9.0 alpha 1 发布了,这是 3.8 之后的首个 3.9 系列版本. ! 官方没有介绍新特性,也没有添加新模块,但是以下模块有所改进: ast asyncio curses ...

  7. python机器学习开源代码_Python简化代码机器学习库PyCaret 2.0发布

    字幕组双语原文:Python简化代码机器学习库PyCaret 2.0发布 英语原文:Announcing PyCaret 2.0 翻译:雷锋字幕组(Shangru) 我们激动的宣布,PyCaret第二 ...

  8. python 3.8.0安卓_Python 3.8.0 稳定版发布,来看看Python 3.8.0的新功能吧

    作为现在比较流行的开源免费编程语言 Python 我想对于开发人员肯定很不陌生.Python 是一种编程语言,语法优美,简单易学,功能强大.比如我们常听说的网络爬虫,大多都是使用 Python 编写开 ...

  9. Python 3.8.0来了!

    来源:新智元 本文约3600字,建议阅读10分钟. 一大波新特性和优化来袭,马上升级吧! [ 导读 ]Python 官网静悄悄地发布了一则大消息:正式发布 Python 3.8.0!新版本较3.7版增 ...

最新文章

  1. ubuntu下安装mysql及常用操作
  2. JSON学习笔记(五)- JSON.stringify()
  3. svm硬间隔与软间隔(转)
  4. C++ 11 在 Qt 5 中的应用
  5. qt ui指针和本类对象_您需要了解的有关UI设计的形状和对象的所有信息
  6. SparkStreaming - 无状态与有状态 updataStateByKey
  7. python小代码_Python爬虫入门有意思的小长代码
  8. linux安装mathematica7,Linux下面如何安装maple,mathematica,matlab这类软件?
  9. 多系统引导工具支持Linux,多系统引导工具(BootThink)
  10. mysql视图什么时候用_Mysql为什么要使用视图?
  11. maven分模块构建项目工程
  12. 关联规则增量更新算法——FUP算法
  13. 2021医学影像分割论文:MSGSE-Net:用于皮层下脑结构分割的多尺度引导压缩和提取网络
  14. tar命令 – 打包和备份的归档工具
  15. 程序员也学点财报--《一本书读懂财报》脑图
  16. 炉石传说如何修改服务器,《炉石传说》如何去其他服务器玩炉石
  17. dede 留言簿 多个
  18. 人工智能之眼:运用科技消除可预防失明
  19. 【计算机组成原理】(唐朔飞)笔记-计算机总线 补充+习题
  20. 蝙蝠侠:阿甘起源 for Mac(角色扮演游戏)支持Big Sur

热门文章

  1. toj 4609 Internal Rate of Return
  2. 【小程序】【Tips】等待服务器的反馈的定时、间隔运行的正确方法
  3. 表格中复制后出现空格_软件应用在Excel表格中怎样批量删除空格?
  4. cad通过钢筋大样生成钢筋明细表插件_各位做室内外设计的朋友,告别CAD单线画图,用天正建筑更方便...
  5. vim 删除多行_Vim 可视化模式入门
  6. 计算机网络原理期末复习提纲,《计算机网络原理》考试复习提纲.doc
  7. 虚拟机状态错误_学会这3招,分分钟迁移业务繁忙虚拟机!
  8. jquery 页面滚动条回到顶部_jquery懒加载、回到顶部
  9. linux自动化测试脚本,linux iperf3 一键自动化测试脚本
  10. java爬去淘宝数据链接重定向_scrapy爬取天猫被重定向302问题