简介
社区开发者在不断的维护更新Python,未来其将成为最受欢迎的编程语言。随着新版本的更迭,在性能和易用性方面都得到不断的提升。一些有意思的功能改动如下:
- 字典方法
- 字符串方法
- 数学函数变化
- 其他变化
字典方法
Python 3.9 增加了dict
类型的两种新方法—分别为合并运算符|
和更新运算符|=
。
合并运算符|
操作如下:
1 2 3 4 5 |
>>> fin = {1: 'x', 2: 'y', 3: 'z'} >>> thon = {4: 'a', 5: 'b'} >>> com = fin | thon >>> com {1: 'x', 2: 'y', 3: 'z', 4: 'a', 5: 'b'} |
可以看出合并运算符|
提供了更加方便的操作方式。
除此之外,更新运算符|=
具有类似的操作:
1 2 3 4 5 |
>>> fin = {1: 'x', 2: 'y', 3: 'z'} >>> thon = {4: 'a', 5: 'b'} >>> fin |= thon >>> fin {1: 'x', 2: 'y', 3: 'z', 4: 'a', 5: 'b'} |
更新运算符|=
有类似replace=True
的编程逻辑。
如果两个字典中含有共同的键值,此时又会怎样呢?
1 2 3 4 5 |
>>> fin = {1: 'x', 2: 'y', 3: 'z'} >>> thon = {3: 'b', 4: 'a',} >>> fin |= thon >>> fin {1: 'x', 2: 'y', 3: 'b', 4: 'a'} |
此时,字典fin
和字典thon
中含有共同的键值4
,更新后第二个字典thon
中的键值对将会取代第一个字典fin
中的键值对。
此外,更新运算符|=
不仅可以更新两个字典,而且还可以将可迭代对象(比如列表、生成器等)更新到一个字典中:
1 2 3 4 5 |
>>> finthon = {'x': '1', 'y': '2'} >>> com = ((i, i) for i in range(3)) >>> finthon |= com >>> finthon {'x': '1', 'y': '2', 0: 0, 1: 1, 2: 2} |
此时com
是一个生成器generator
对象。
需要注意的是,如果我们直接使用并集运算符|
,则会提示类型错误,因为它只允许dict
类型之间并集:
1 |
TypeError: unsupported operand type(s) for |: 'dict' and 'generator' |
字符串方法
str
类型中新增两种有意思的方法removeprefix()
和removesuffix()
:
removeprefix()
:如果str
以它开头的话,将会返回一个修改过前缀的新字符串,否则它将返回原始字符串。
removesuffix()
:如果str
以其结尾,则返回带有修改过后缀的新字符串,否则它将返回原始字符串。
示例如下:
1 2 3 4 |
>>> 'FinthonCom'.removeprefix('Finthon') 'Com' >>> 'FinthonCom'.removesuffix('Com') 'Finthon' |
这些方法在小编的日常工作中很实用,比如处理大批量的文件,需要获取每个文件后缀的id,就显得轻松多了:
数学函数变化
一个比较实用的变化是最大公约数gcd()
和最小公倍数lcm()
,在之前的版本中如果想要求解三个数字以上的最大公约数和最小公倍数比较麻烦。
以前求三个数的最大公约数需要:
1 2 3 |
>>> import math >>> math.gcd(20, math.gcd(44, 38)) 2 |
求最小公倍数甚至需要迭代计算。
新特性允许直接求解:
1 2 3 4 5 |
>>> import math >>> math.gcd(20, 44, 38) 2 >>> math.lcm(4, 8, 5) 40 |
其他变化
性能提升
Python的每个修订版与以前的版本相比都有性能改进。Python 3.9进行了两项重大改进,但无需对现有代码进行任何更改就可以提高性能:
- 第一个改进更多涉及矢量调用协议的使用,通过最小化或消除临时对象进行许多常见函数的调用;
- Python 3.9引入了几个新的内置函数,包括
range
、tuple
、set
、frozenset
、list
、dict
——使用vectorcall可以加快执行速度
发布周期
目前,Python以18个月为周期进行新版本的开发和发布。以后Python开发团队将采用年度发布周期。