关于Python3.9,你不可不知的4个新特性

开发 后端
以前Python使用 LL(1) 解析器,从Python 3.9 开始,将使用 PEG 解析器,官方认为,这个更改会使得他们更加方便地构建新功能。

1. 词典联合运算符

这是我最喜欢的功能之一,语法非常优美。

在Python3.9,如果你有两个词典,现在可以用这些运算符进行合并和更新。

合并运算符 "|":

还有update运算符|=,它会更新原始字典:

  1. a = {1: 'a', 2: 'b', 3: 'c'} 
  2. b = {4: 'd', 5: 'e'} 
  3. a |= b 
  4. print(a) 
  5. {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'} 

如果我们的词典共享一个key,那么将使用第二个词典中的value:

  1. a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'} 
  2. b = {4: 'd', 5: 'e', 6: 'but different'} 
  3. print(a | b) 
  4. {1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'} 

使用可迭代对象进行字典更新

|=操作符的另一个很酷的特性是能够使用可迭代对象(例如列表或生成器)使用新的键值对更新字典:

  1. a = {'a': 'one', 'b': 'two'} 
  2. b = ((i, i**2) for i in range(3)) 
  3. a |= b 
  4. print(a) 
  5. {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4} 

当然,如果你用|这样做,则会得到TypeError,因为它只能用于dict类型之间的联合。

2. 字符串方法

removeprefix()和removesuffix()

  • str.removeprefix(substring: string) 是一个方法,接收一个substring参数,顾名思义,它将删除字符串对应的substring前缀,如果没有对应的前缀,返回原字符串。
  • str.removesuffix(substring: string) 是一个方法,接收一个substring参数,它将删除字符串的对应substring后缀,如果没有对应的后缀,返回原字符串。

当然,两个函数执行你可以通过使用string[len(prefix):]前缀和string[:-len(suffix)]后缀来实现。

这些是非常简单的操作,因此也是非常简单的功能,考虑到你可能经常执行这些操作,Python3.9 提供的这两个内置函数应该能让你非常爽。

3. 新的数学函数

Python 3.9 的数学模块进行了不少的优化并添加了许多新功能。

比如以前gcd计算最大公因数的函数只能应用于2个数字,这就很蛋疼,我们必须使用 math.gcd(80, math.gcd(64, 152))来处理大于2个数字的情况。

现在 gcd 允许计算任意数量的数字。

  1. import math 
  2.  
  3. # Greatest common divisor 
  4. math.gcd(80, 64, 152) 
  5. # 8 

Math模块中,第一个新增的功能是:

  1. # 最小公倍数 
  2. math.lcm(4, 8, 5) 
  3. # 40 

用于计算最小公倍数:math.lcm,与gcd一样,它允许可变数量的参数。

4. 新的解析器—PEG

这一个更改你可能看不见、摸不着,但它可能改变Python的未来。

以前Python使用 LL(1) 解析器,从Python 3.9 开始,将使用 PEG 解析器,官方认为,这个更改会使得他们更加方便地构建新功能。

因此,请期待Python 3.10,Python团队或许能给我们带来更多的惊喜!

 

责任编辑:赵宁宁 来源: Python实用宝典
相关推荐

2024-03-21 08:57:39

语言软件开发

2021-01-28 10:17:54

人工智能AI机器学习

2020-01-17 06:12:10

物联网IOT技术

2011-04-25 09:45:09

C#委托

2014-06-20 14:35:48

浪潮数据

2015-05-21 10:03:04

应用标题ASO

2015-07-21 05:55:12

2023-07-06 14:08:54

ChatGPTLLM大型语言模型

2010-06-11 14:46:38

可路由协议

2017-11-30 12:23:55

IO性能RAID

2021-08-12 16:02:22

Jupyter NotPython命令

2015-01-15 09:34:28

2020-11-30 13:12:04

Linux文本命令

2023-09-20 09:00:00

2023-11-13 14:19:57

Golang编程语言

2023-09-22 12:14:33

2023-06-15 11:01:43

Java工具开源

2015-06-10 10:56:50

iOS开发技巧

2022-02-16 08:01:45

网络安全趋势

2023-06-26 14:11:06

SQLC++语言
点赞
收藏

51CTO技术栈公众号