python3.10新特性 match-case,bit_count,以及3.9的cache装饰器

近日在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(最近最少使用)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值