10 月 15 日,Python 3.8 稳定版正式发布咯~

官网也发了一篇介绍 v3.8 新特性的文章。这里先汇总一下:

1、新增赋值操作符 :=

作用:把较大表达式中的某部分值赋给变量。

因为看起来像海象的眼睛和牙齿,:= 操作符有个特别的名字:海象操作符

范例1:

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

用了 := ,避免调用 len() 两次。

范例2:

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

从目前网上的评论来看,多数认为 虽然省了代码,但降低了可读性。

2、新增(仅限位置参数)的语法符号 /

Positional-only parameters

作用:表明一些函数的参数,必须指定位置,并且不能用作关键字参数。

范例

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

在这个例子中,参数 a 和 b 是仅限位置参数的,而 c 或 d可以是仅限位置参数,也可以是关键字参数,e 和 f 必须是关键字参数。

3、新增 PYTHONPYCACHEPREFIX 设置 (-X pycache_prefix)

作用:把隐式字节码缓存,配置为使用单独的并行文件系统树,而不是在每个源目录中使用缺省的 pycache 子目录。

4、调试版本与发行版本共享 ABI

5、f 字符串新支持 = 说明符,用于自记录表达式和调试

f 字符串是格式化的字符串文字,它是在 Python 3.6 中引入的,已经非常流行。

这次在 v3.8 中新增支持 = 说明符。

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

6、PEP 578: Python Runtime Audit Hooks / 运行时审计挂钩

PEP 添加了审计挂钩和验证开放挂钩。这两个版本都可以从 Python 和原生代码(native code)中获得,允许用纯 Python 代码编写的应用程序和框架利用额外的通知,同时还允许嵌入式人员或系统管理员在始终启用审计的情况下部署 Python 构建。

7、PEP 587: Python Initialization Configuration

PEP 587 添加了一个新的 C API,来配置 Python 初始化,提供对整个配置的更好控制和更好的错误报告。

此外,

  • continue 终于可以合法出现 finally: 块中了;

  • 在 Windows ,默认的异步(asyncio)事件循环改成了 ProactorEventLoop

  • 在 macOS 上, spawn start 方法默认加到 multiprocessing 中了

  • 现在multiprocessing可以使用共享内存段,来避免进程间的 pickle 开销;

  • typed_ast 被合并回 CPython 了;

  • LOAD_GLOBAL 现在快了 40%;

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

其他特性和解读,请直接参阅官方介绍:

https://docs.python.org/3/whatsnew/3.8.html

另外,Python 下一个版本 3.9 已在开发之中。

©著作权归作者所有:来自51CTO博客作者mb5fe18fed96438的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. php中函数参数传递的3种方式和区别(附详解)
  2. php-fpm.conf配置文件中文及重要参数说明
  3. PHP最大连接数的设置及php-fpm高并发参数调整
  4. PHP传递数组格式参数到shell脚本中
  5. 对于PHP-FPM参数的理解
  6. variables_order参数详解

随机推荐

  1. 将嵌入式DB与远程DB同步
  2. 我在Java中组织这些if语句时遇到了很多麻
  3. java与ASP.NET网络应用程序在生命期开始
  4. 怎样用java生成GUID与UUID
  5. 怎么用java 实现两个web service之间调用
  6. Java IO流系列(四)—— 从字节流及其缓冲区
  7. java8中lambda表达式
  8. FilenameFilter文件名过滤器使用实例
  9. Java核心技术卷I:基础知识(原书第8版):14.
  10. String字符串的应用