近日在python学习中发现了几个python3.10版本的新特性,按文档查阅后整理了一些想法:
1. match-case
所谓match-case方法实际上类似于Java中的switch方法,用于将一个或多个事例块给出的连续模式进行比较。
在之前的版本中,python实际上并没有提供这样的方法,要实现这样的功能往往需要用一连串的if... elif... elif... elif...,(真的很痛苦)
下面给出一个具体的用法示例:
arr = [1, 2, 3, 4, 5]
for i in arr:
match i:
case 1:
print("too small")
case 2:
print("little smaller")
case 4:
print("little larger")
case 5:
print("too large")
case _:
print("equal")
其中“_”是通配符,代表默认情况,有点else的感觉,和其他语言的default类似。
2. bit_count
这个比较就比较简单了,实际上就是一个用于计算一个数转换为二进制后,一整串中1的个数。
简单举个例子就是:
n = 5 # 对应二进制串为 101
n.bit_count() # 统计101中1的个数,即返回2
3. cache装饰器(3.9)
由于题主主要用的还是3.8,在学习过程中也了解到一些比较好用的3.9特性,分享一下!
cache装饰器是旧版本lru_cache的一个优化,用于缓存数据,在动态规划问题中的记忆化搜索上有非常广泛的应用。在记忆化搜索中,程序会记录下已经计算过的结果,然后在后续的计算中,如果需要再次计算相同的问题,就直接返回之前保存的结果,而不是重新计算。这样就能够避免重复计算,提高程序的执行效率。
在旧版本的 lru_cache 中,在默认情况下对缓存队列有大小的限制,默认maxsize=128,当缓存队列已满时,将缓存使用次数最少的元素[1]从队列中移除,将新元素加入队列。
而新版本的cache不需要移出旧值,缓存大小没有限制,所以比带有大小限制的 lru_cache() 更小更快。
不过不慌,如果使用的是旧版本python,咱也可以用 @lru_cache(maxsize=None) 来实现相同的功能
[1] 这也是算法名称的由来,Least Recently Used(最近最少使用)