点击上方“码农突围”,马上关注,每天上午8:50准时推送

这里是码农充电第一站,回复“666”,获取一份专属大礼包

真爱,请设置“星标”或点个“在看”

来源:.python.org

编辑:肖琴,转自:新智元

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

今天,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 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

推荐阅读:

Python基础专题????

1. Python中的线程和进程

2. Python多线程实战

3. Python中数据深拷贝、浅拷贝

4. Python中的作用域

5. Python中的内存管理机制

Python爬虫和数据分析专题????

1. Python爬取某站上海租房图片

2. Python爬取拉勾网数据并进行数据可视化

3. Python爬虫小白入门-爬取披头士乐队历年专辑封面-网易云音乐

4. Python动手分析天猫内衣售卖数据,得到你想知道的信息

5. Python抓取猫眼近10万条评论并分析电影《一出好戏》到底如何?

6. Python爬虫实战:利用scrapy,短短50行代码下载整站短视频

7. Python 通过采集两万条数据,对《无名之辈》影评分析

8. 想不想知道充气娃娃到底什么感觉?来!我用Python告诉你

9. Python爬虫:动态爬取QQ说说并生成词云,分析朋友状况

10. Python + PyQt5 实现美剧爬虫可视工具

11. Python爬取批量获取高清壁纸

12. 有趣的一个Python爬虫实例(爬取段子,笑话,情感句子)

13. Python爬虫获取电子书资源实战

14. 面试官问我会用Python爬虫腾讯视频么?我是这样回复的...

15. 18个Python爬虫实战案例(已开源)

16. Python爬虫44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?

17. 深夜,我用python爬取了整个斗图网站,不服来斗

18. 再推荐23个Python爬虫开源项目代码:微信、淘宝、豆瓣

19. 我用Python爬了点你们需要的电影,这些电影真的很不错~

20. Python爬取抖音高颜值小姐姐视频

Python综合专题????

1. 使用 Python 进行微信好友分析

2. Python面试题37道(附答案)看完面试不愁了

3. Python 利用opencv去除图片水印

4. 被女朋友三番两次拉黑后,我用 Python 写了个“舔狗”必备神器

5. 昨晚家里停网后,我动了邪念用Python破解了隔壁小姐姐的wifi密码

6. 东半球最强Python新手100天学习计划开源,这次再学不会算我输!

7. 向Excel说再见,神级编辑器统一表格与Python

8. 牛逼,竟然可以用 Python 操作 Word 文档,这么多的骚操作!

更多爬虫,关注下面公号,后台回复:爬虫实战,获取独家整理的一份爬虫汇总。

分享Python&AI干货,点亮 在看 

官宣:Python 3.8正式发布!来看看有哪些新功能相关推荐

  1. iOS培训之iOS 8正式发布:增加多个新功能

    iOS培训之iOS 8正式发布:增加多个新功能 广州传智播客作为华南地区iOS培训的领头羊,对iOS培训课程的研究都是走在互联网发展的潮流最前沿,把最新最好的技术教导给学生.在课程体系外,还有很多有趣 ...

  2. Python小屋刷题神器最近升级的新功能介绍

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年1月第6次印刷,山东省一流本科 ...

  3. 不得了了!刚刚腾讯官宣 Python 开发人才这样选

    " 阅读本文大概需要 4 分钟. " 经历了魔幻的 2020 最难求职季,终于迎来 2021 的"金三银四". 但疫情带来的余威不减,后疫情下开发人员.人工智能 ...

  4. 官宣!全球首富马斯克:创办这所“新大学”!

    埃隆·马斯克(Elon Musk)是特斯拉和SpaceX的创始人兼首席执行官. 来源:青塔 编辑:nhyilin 美国<福布斯>杂志10月26日称,得益于特斯拉股价大涨,特斯拉CEO埃隆· ...

  5. 官宣:CSDN发放福利!免费使用自定义域名功能一个月!

    为感谢广大猿类多年来在CSDN孜孜不倦的耕耘,自2019年6月1日-2019年6月31日期间,满足以下条件的用户将获取重大福利:免费使用自定义域名功能一个月! 使用过自定义用户名权限用户 同时,我们将 ...

  6. 官宣|AI TIME & 上海交通大学俱乐部招新啦!

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! AI TIME & 上海交通大学俱乐部成立啦 关于AI TIME AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界 ...

  7. python的继承模式_Python之继承--增加新功能,不更改以前的代码

    在实际工作中,设计模式的时候,要增加新功能,不要更改以前的代码,这是封装和继承的高度总结. isinstance('对象',"类") 返回Ture or False issubcl ...

  8. Win10 20H2正式发布,对比旧版新功能一览

    微软在其官方网站发布了最新的Windows 10 20H2版(10月更新),根据微软的更新规则,春季版一般包含更多新功能,而秋季版更倾向于Bug修复,因此很多人对于20H2的期待程度并不高.但事实上, ...

  9. 官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行!

    ‍‍ 翻译 | 付典 Review | 徐榜江.朱翥 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发, ...

最新文章

  1. python制作生日祝福_【中信项目案例分享】python 实现自动生成个性化生日贺卡...
  2. make: *** [ext/fileinfo/libmagic/apprentice.lo] Er
  3. 【solr5.5环境搭建】在tomcat8里面部署solr5.5
  4. mysql实现树形_Mysql实现树形递归查询
  5. winsocket(1)
  6. 美国政府在将Web业务赶出美国
  7. Linux入门:usermod - 修改用户帐户信息
  8. 洛谷P1274-魔术数字游戏
  9. javascript二叉树基本功能实现
  10. 群晖DS218+部署kafka
  11. s1 episode1(一)
  12. git deamon 一个简单的git服务器
  13. python 获取项目根目录
  14. Spark的Cache和Checkpoint区别和联系拾遗
  15. LocalDB 声称以后对于中文乱码的问题
  16. java 读取项目内图片,java web项目中读取本地图片
  17. html网页设计期末大作业——酒庄网页设计实例(5页)
  18. java nmt_强大的nmt
  19. CISP与CISP-PTE有什么区别?
  20. 产品开发过程中的流程图

热门文章

  1. win10自带截图(Win+Shift+S快捷键)
  2. 手机开发实战59——语音信箱介绍1
  3. datareader分页
  4. iPhone3GS,iPhone4完美降级
  5. 复制并超越?零钱通VS余额宝,你会选择谁?
  6. 三伏天,人体内有一个“冰箱”
  7. 说梦话都是代码级的,你信吗?
  8. iphone消息推送原理
  9. Painter 12安装教程
  10. 免费、不用部署SD:AI二维码制作教程