乐趣区

关于python:计算速度太慢试试-lrucache-装饰器

家喻户晓,python 语言是相当好用的,然而它的执行性能也是绝对其余语言比较慢的。还好 python 提供了一个十分优良的装璜器来解决这个问题,它就是 lru_cache 装璜器。lru_cache 是通过驰名的 LCU 算法来实现的,也就是最近最久未应用缓存淘汰算法。

【浏览全文】

为了造成显著的比照,应用一般的形式来实现一个函数的递归过程,即不增加任何的装璜器来实现。

def func(n):
    '''
    递归样例函数、未增加 lru_cache 装璜器
    :param n:
    :return:
    '''
    if n <= 1:
        return n
    return func(n - 1) + func(n - 2)

接下来,再应用 lru_cache 装璜器的形式实现一遍,首先,导入须要装璜器模块。

from functools import lru_cache

过程比较简单,这样筹备工作就实现。而后,在代码块中间接援用即可。

@lru_cache
def func(n):
    '''
    递归样例函数、增加 lru_cache 装璜器
    :param n:
    :return:
    '''
    if n <= 1:
        return n
    return func(n - 1) + func(n - 2)

如上述代码所示,只须要在函数定义的局部退出装璜器的润饰功败垂成了。

最初,只须要写一个 main 函数别离调用这两个函数就会呈现不言而喻的成果。

import time

'''测试耗费工夫'''
if __name__ == '__main__':
    start_time = time.time()
    result = func(10)
    end_time = time.time()
    cost_time = end_time - start_time
    print('result is' + str(result),'cost_time is' + str(cost_time))

通过下面 @lru_cache 的应用实例,能够分明的发现 cost_time is 0.0,工夫上的耗费根本能够忽略不计。而在不应用此装璜器的状况下运算了半天都没有进去后果,成果是不言而喻的。

@lru_cache 装璜器应用大抵来讲就是将每次递归计算的数据后果作为 hash 缓存记录,当再次须要这个后果的时候就间接从缓存的数据中将后果取出防止反复计算的性能耗费。它的底层实现也牵扯到双向链表、hash 表等实现处理过程,更深层次的 LCU 算法原理大家能够学习数据结构 + 算法的一些惯例常识。

【往期举荐】

冒泡排序、抉择排序之间的比拟与代码实现!

如何通过 pynput 与日志记录实现键盘、鼠标的监听行为?

如果你是一名 java 程序员,面对曾经写好的 python 脚本该如何调用,其实很简略!

如何应用 PyQt5 一步步实现用户登录 GUI 界面、登录后跳转?

办公自动化:几行代码将 PDF 文档转换为 WORD 文档(代码实战)!

退出移动版