关于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文档(代码实战)!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理