Pearce,SusanM.编《Interpreting Objects and Collections》作品简介与读书感悟

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

本文约3600字,建议阅读10分钟。

一大波新特性和优化来袭,马上升级吧!

[ 导读 ]Python 官网静悄悄地发布了一则大消息:正式发布 Python 3.8.0!新版本较3.7版增加了一大波新功能和优化,来一起参与讨论吧~

近日,Python 官网宣布,正式发布 Python 3.8.0!

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)

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

Pearce,SusanM.编《Interpreting Objects and Collections》作品简介与读书感悟

调试构建使用与发布构建相同的 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),因为它长得像海象的眼睛和象牙。

海象

1、《狂人日记》是鲁迅创作的第一个短篇白话日记体小说,也是中国第一部现代白话文小说,写于1918年4月。该文首发于1918年5月15日4卷5号的《新青年》月刊,后收入《呐喊》集,编入《鲁迅全集》第一卷。小说通过被迫害。

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

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

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

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

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

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

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

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

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

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

了解详情:

仅限位置形参

读书笔记: 书名:童年 作者:高尔基 好词 瑗际 歪斜凌乱 灰雾茫茫 轻声慢语 胆怯 不知所措 软塌塌 澄澈 耸向 独树一帜 难以置信 琐事 矗立 与人为善 不折不扣 不动声色 窥伺 掩面而笑 绵绵不断 不为所动 好句 1.我看着他好。

新增了一个函数形参语法 / 用来指明某些函数形参必须使用仅限位置而非关键字参数的形式。这种标记语法与通过 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)e must be a keyword argument

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

这种标记形式的一个用例是它允许纯 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 ways10 20 {'a': 1,'b': 2,'c': 3}

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

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

了解详情:

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

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

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

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

Pearce,SusanM.编《Interpreting Objects and Collections》作品简介与读书感悟

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

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'

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

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

PEP 587: Python 初始化配置

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

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

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

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

了解详情:

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

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

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

了解详情:

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

连续三年夺冠,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 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?欢迎来评论一起讨论~

校对:洪舒越

作者自称“1924年以前不太懂俄语,而双目夫明前也只上过一年函授共产主义大学:因作品塑造了保尔·柯察金这个有着钢铁般意志的共产主义战土的形象和作家自身经历的传奇品质,《钢铁是怎样炼成的》成为世界革命青年成才的“教科书”和“圣经”。

— 完 —

关注清华-青岛数据科学研究院官方微信公众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。

上一篇 2022年12月27 10:27
下一篇 2023年02月06 07:51

相关推荐

  • excel怎么设置密码,怎么给excel文件加密

    Excel中经常要进行协同工作,但是别人拿到数据表格之后,可能会对你的数据进行修改,怎么给excel文件加密,早晨不必要的麻烦,那么有没有办法来限制自己录入的数据不被修改了?一、目的解读。第一种方法:

    2023年02月04 227
  • 压力太大怎么办,学生如何缓解压力

    现在人们的生活节奏变得越来越快,需要面临的压力也非常大,压力越大患上心血管疾病的风险就会越高,对身体带来严重的危害,所以,学生如何缓解压力,要学会释放好压力。,心理压力大的危害有哪些?总是处于紧张压力

    2023年01月10 206
  • 体重公式怎样计算,身高÷体重2怎么算

    吉林大学第一医院内分泌代谢科副主任医师李卓:理想体重的简单计算公式是身高(cm)-105,获得的结果就是理想体重的公斤数。还有另外一个我们比较常用的指标——体重指数(BMI),它的计算公式为BMI=体

    2022年12月28 206
  • 迪怎么组词,用迪组词两个字

    人教版小学五年级语文(上)生字组词归纳第一课窃读记【窃】qiè窃取窃听盗窃窃窃私语迪拼音:dí迪组词:迪斯科、摩加迪沙、启迪、麦迪霉素、马赫迪、允迪、底迪、训迪、迪古、迪是一个中国汉字,读音为dí,总

    2023年02月06 234
  • 文献怎么标注,正文怎么标注参考文献

    以维普为例一、检索需要的文章,勾选二、导出题录三、复制后即可粘贴文章l插入交叉引用在需要插入引用文献的位置,选择【插入】——【交叉引用】分为全部引用、局部引用、间接引用企业回首先说说在freechec

    2023年02月11 298
  • 怎样点评作文,点评作文评语

    【灌碗鸡汤】:读书之法,在循序而渐进,熟读而精思。——朱熹没有任何事情可以是一蹴而就的,今天一点一滴的积累是为了明天更好的表现,读书要结合思考进行,才会获益良多。文章点评写法一般要从文章的中心、选材、

    2023年01月01 274
  • 魔力挺怎么样,魔力听什么意思

    文|二哥头当前国内的许多汽车品牌,都陷入了一个怪圈:销量不好,降价促销,价格一降,品牌形象就受到影响;但如果维持价格不动,那么销量又一落千丈。如何「站着,又能把钱赚了」,成为许多品牌都在思考的问题,而

    2023年02月05 231
  • excel怎么搜索,如何在excel中查找指定内容

    如何在excel中查找指定内容,在使用Excel表格进行办公的时候,很有可能会使用各类的函数来计算数据。但是有些新手在进行计算数据的时候,找不到需要的函数。那么如何使用Excel中的搜索函数呢?下面就

    2023年01月17 207
  • 曹五笔怎么打,曹字怎么拆

    ​曹读音cáo部首日(曰)笔画数11五笔GMAJ曹cáo(名词)⑴古代指诉讼的原告和被告。即两曹[plaintiffanddefendant]曹五笔:GMAJ第一码字根是"一",“一”在G键上第二码字

    2023年02月06 222
  • 怎样写一份辞职报告,一份完整的报告怎么写

    企业职工辞职报告简单(精选10篇)(篇一)  各位领导:辞职报告写法如下:尊敬的领导:您好!由于我的一些个人原因,经过一段时间的慎重考虑后,我决定向公司提出辞职。在短短一年的时间里,公司给予了我多次机

    2023年01月08 268
  • 祝福教师节,对老师教师节的祝福语

    2022年中秋节和教师节撞了个满怀,别忘了表达相思,传递祝福,感念师恩,明月寄相思,恩师情难忘,小编整理了一些中秋节遇上教师节的文案,一起来看一下吧。中秋节遇上教师节精选文案说说月到中秋分外明,节日喜

    2022年12月11 221
  • 学士学位证怎么考,自考拿学位太难了

    最近很多咨询的学员说,我已经有本科证了,就是想要个学位证,怎么办?已经毕业的学员之前可能没那么在意学位这个事情,但根据现在市场行情,凡招聘要本科学历的都要配学位。那么这种情况下,如何才能取得学位证呢?

    2023年01月22 221
  • 摩擦力怎么算,初中摩擦力怎么算

    摩擦力是阻碍物体相对运动的力,初中摩擦力怎么算,摩擦力分为静摩擦力、滑动摩擦力和滚动摩擦力三种。摩擦力与相互摩擦的物体有关,因此书中对摩擦力所做出的描述不一般化,也不像对其它的力这么精确。小学科学教师

    2023年01月11 246
关注微信