Python3.8正式发布!新特性解析在这里

诗书塞外 Python程序员

10月14日,Python 3.8 正式版发布。这也意味着一个Python开发周期的结束,和另一个开发周期的开始。Python 3.9 预计在2020年10月份发布。

那么Python 3.8都带来了什么新特性和什么新改动呢?让我们来盘点一下。

新特性

1、赋值表达式

顾名思义,就是在表达式中进行赋值。这个特性总体来说是一个语法糖,让代码看起来更简洁了一点点。比如,下面这段代码:

n = len(a)

if (n) > 10:

print(f"List is too long ({n} elements, expected <= 10)")

在Python 3.8中可以写为:

if (n := len(a)) > 10:

print(f"List is too long ({n} elements, expected <= 10)")

如果n这个变量只有在if语句及子句中使用,那么明显Python 3.8的写法更为简洁。其中Python 3.8中用到的操作符:=被称为海象操作符(因为这个操作符看起来像海象的眼睛和一对儿长牙)。

嗯,你看,像不像?

这个特性的另外两个典型例子是在while语句,以及列表推导中,像这样:

# Loop over fixed length blocks

while (block := f.read(256)) != '':

process(block)

[clean_name.title() for name in names

if (clean_name := normalize('NFC', name)) in allowed_names]

2、限定位置参数

这个特性允许你通过在函数参数列表中加一个"/",来表示"/"之前的参数只能够当作位置参数使用。下面我们看一个例子:

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

print(a, b, c, d, e, f)

这个例子中,a、b只能当作位置参数使用,e、f只能当作关键字参数使用(如果你不知道为什么,请复习*和**的用法),而c、d即可以用作位置参数,也可以用作关键字参数。

这个特性主要是库或者基础代码的作者使用,它让基础代码的作者不必为参数起一个固定的名字,参数名字调整也不会破坏调用者的代码。没有这个特性之前,有的调用者会对每个参数都以关键字参数的形式调用,这就导致了库作者一改参数名,调用代码就崩溃。

另外,还有的库函数根本不适合用名字传参,比如我们常见的add函数,add(1, 2)明显表意性要好于add(a=1, b=2),add的参数无论起什么名字,都感觉是多余的。

3、支持将编译字节码文件输出到其他位置

Python项目中一个常见的麻烦就是清理git代码库中的pycache文件,这些文件往往是你一不小心就添加进去了,清理起来却颇为麻烦。Python 3.8支持通过设置环境变量 PYTHONPYCACHEPREFIX ,让pycache生成到其他位置,而不跟.py文件混在一起。你在代码中可以通过 sys.pycache_prefix 查看生成的位置。

4、F字符串内的'='表达式

在调试的时候,你是否经常会写这样的代码?

>>> user = 'eric_idle'

>>> member_since = date(1975, 7, 31)

>>> f'user={user} member_since={member_since}'

"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

其中user={user},member_since={member_since}就是典型的样板代码。在Python 3.8中,你可以简写为:

>>> user = 'eric_idle'

>>> member_since = date(1975, 7, 31)

>>> f'{user=} {member_since=}'

"user='eric_idle' member_since=datetime.date(1975, 7, 31)"

一个等号,f字符串就知道你需要在等号后面继续把等号前面变量的值显示出来。对于调试来说,这确实更加简洁了。

5、pickle协议5,独立处理内存中的数据缓存。

Python进程之间传输数据时,pickle是经常用到的。对于数据量大的情况,妥善管理并优化内存使用是非常重要的。Python3.8 中对pickle的数据传输做了优化,提高了性能和效率。

其他改动

1、finally语句中可以有continue子句了,以前是不行的。

2、函数调用时,f((keyword)=arg) 这种写法不再允许了。

3、新增模块importlib.metadata,用以读取第三方包的信息。

◆ ◆ ◆ ◆ ◆

今日签到口令:pf2x

以上就是小编总结的大家应该会比较感兴趣的特性和改动了,如果您想查看完整的changelog,请访问这个地址(点击阅读原文也可以):

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

python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里相关推荐

  1. python3.8新特性 逻辑表达式_Python3.8新特性

    人生天地间,忽如远行客 昨日Python3.8稳定版发布,官网发布了一篇介绍新特性的文章,在此记录一下. 新增赋值操作符 := 作用:把较大表达式中的某部分值赋给变量,因为看起来像海象的眼睛和牙齿,: ...

  2. python3.8新特性 逻辑表达式_python 3.8 新特性

    安装 python 3.8 环境 , 在此刻 似乎 anaconda 都还不支持 3.8 ,所以直接下载源码进行编译安装 环境: centos7.5 版本:python3.8 1.依赖包安装 yum ...

  3. 【小家java】java10新特性(简述十大新特性) 小步迭代

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  4. Java11新特性(一)——JDK11新特性概述

    序言 关于JDK11,自从去年也就是2018年9月份 Oracle 对外公布--JDK11正式发布以来,博主就跃跃欲试,但是由于项目周期时间紧,一直未果,今年,也就是2019年2月底系统正式上线,博主 ...

  5. [转]C# 2.0新特性与C# 3.5新特性

    C# 2.0新特性与C# 3.5新特性 一.C# 2.0 新特性: 1.泛型List<MyObject> obj_list=new List(); obj_list.Add(new MyO ...

  6. SQL Server 2016新特性:列存储索引新特性

    SQL Server 2016新特性:列存储索引新特性 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的. 非聚集的列存储索引支持筛选条件. 在内存优化表中可以有一个列存储索引,可 ...

  7. c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引

    原创作者:杨涛涛 我们今天来介绍下 MySQL 8.0 引入的新特性:倒序索引. MySQL长期以来对索引的建立只允许正向asc存储,就算建立了desc,也是忽略掉. 比如对于以下的查询,无法发挥索引 ...

  8. Git协助方式:Fork项目开发新功能并使用Pull-Request把新特性推送给原项目

    Git协助方式:Fork项目开发新功能并使用Pull-Request把新特性推送给原项目 Pull Request 是开发者使用 GitHub 进行协作的利器.这个功能为用户提供了友好的页面,让提议的 ...

  9. Kinect SDK v1.7 新特性、交互框架与新概念

    Kinect SDK v1.7 新特性.交互框架与新概念 zouxy09@qq.com http://blog.csdn.net/zouxy09 2013年3月18日,微软Kinect for Win ...

最新文章

  1. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器
  2. Keil进入仿真,窗口不显示程序运行箭头
  3. Spring启动慢?提速利器SpringFu来了
  4. Java 接口和抽象类可以被new么?
  5. 芯片巨头们2019年的AI芯片之争会如何?
  6. win10万能触摸屏驱动_教你win10系统设置usb鼠标驱动的方法
  7. 优秀工程师应该具备哪些素质_一名优秀工程师所需要具备的条件和素质[1]
  8. Eclipse 常用技巧及常见问题解决
  9. Atitit 眼科医学之道 attilax总结
  10. php讲用户输入的值存入数组,如何将表单输入数组转换为PHP数组
  11. Redfish 验证工具: Redfish Service Validator (OData CSDL)
  12. ThreeJS 实现等值线效果
  13. lpush rpush 区别_Redis系列(六):数据结构List双向链表LPUSH、LPOP、RPUSH、RPOP、LLEN命令...
  14. ESP8266开发之旅 基础篇⑤ ESP8266 SPI通信和I2C通信
  15. xml 硕正报表_硕正轻量级富Web应用套件–硕正报表主要指标及功能清单
  16. 决策树C4.5算法 c语言实现,数据挖掘十大经典算法(1) C4.5_决策树算法
  17. Ubuntu 18.04 更换阿里源
  18. 小半径中值模糊的急速实现(16MB图7.5ms实现) + Photoshop中蒙尘和划痕算法解读
  19. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序
  20. HQChart使用教程31- 走势图异动数据设置

热门文章

  1. python 购物车分析_python 简易购物车程序解析
  2. html5 如何局部放大,【HTML5特效】挺简单的HTML5放大效果
  3. css不换行属性_前端 | css display:flex 的六个属性你知道吗
  4. sql int 比较_高质量SQL的30条建议 建议你收藏
  5. [codevs 1917] 深海机器人问题
  6. CVPR 2020 《Local-Global Video-Text Interactions for Temporal Grounding》论文笔记
  7. mysql gbk支持_mysql如何支持gbk编码
  8. tensorflow saver_TensorFlow: Model Persistence
  9. python分糖果_分糖果_平安科技笔试题_牛客网
  10. httpclient 忽略证书_对接外部接口,又一次证书问题!