让你Python到很爽的加速递归函数的装饰器


Posted in Python onMay 26, 2019

今天我们会讲到一个[装饰器]

注记:链接“装饰器”指Python3教程中的装饰器教程。可以在这里快速了解什么是装饰器。

@functools.lru_cache——进行函数执行结果备忘,显著提升递归函数执行时间。

示例:寻找宝藏。在一个嵌套元组tuple或列表list中寻找元素'Gold Coin'

import time
from functools import lru_cache
def find_treasure(box):
 for item in box:
  if isinstance(item, (tuple, list)):
   find_treasure(item)
  elif item == 'Gold Coin':
   print('Find the treasure!')
   return True
start = time.perf_counter()
find_treasure(('sth', 'sth', 'sth',
    ('Bad Coin', 'normal coin', 'fish', 'sth', 'any sth'),
    ('Bad Coin', 'normal coin', 'fish', 'sth', 'any sth'),
    'Gold Coin', ))
end = time.perf_counter()
run_time_without_cache = end - start
print('在没有Cache的情况下,运行花费了{} s。'.format(run_time_without_cache))
@lru_cache()
def find_treasure_quickly(box):
 for item in box:
  if isinstance(item, (tuple, list)):
   find_treasure(item)
  elif item == 'Gold Coin':
   print('Find the treasure!')
   return True
start = time.perf_counter()
find_treasure_quickly(('sth', 'sth', 'sth',
      ('Bad Coin', 'normal coin', 'fish', 'sth', 'any sth'),
      ('Bad Coin', 'normal coin', 'fish', 'sth', 'any sth'),
      'Gold Coin', ))
end = time.perf_counter()
run_time_with_cache = end - start
print('在有Cache的情况下,运行花费了{} s。'.format(run_time_with_cache))
print('有Cache比没Cache快{} s。'.format(float(run_time_without_cache-run_time_with_cache)))

最终输出

Find the treasure!
在没有Cache的情况下,运行花费了0.0002182829999810565 s。
Find the treasure!
在有Cache的情况下,运行花费了0.00011638000000857573 s。
有Cache比没Cache快0.00010190299997248076 s。

注记:运行这个示例时我的电脑配置如下

CPU:AMD Ryzen 5 2600
RAM:Kingston HyperX 8Gigabytes 2666

约使用7个月。

这个装饰器可以在函数运行时记录它的输入值与运行结果。当元组('Bad Coin', 'normal coin', 'fish', 'sth', 'any sth')出现第二次时,加了这个装饰器的函数find_the_treasure_quickly不会再次在递归时对这个元组进行查找,而是直接在“备忘录”中找到运行结果并返回!

总结

以上所述是小编给大家介绍的让你Python到很爽的加速递归函数的装饰器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python批量导出导入MySQL用户的方法
Nov 15 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
想学python 这5本书籍你必看!
Dec 11 Python
Python常用的json标准库
Feb 19 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
Python包argparse模块常用方法
Jun 04 Python
Django框架模板的使用方法示例
May 25 #Python
Django框架搭建的简易图书信息网站案例
May 25 #Python
Django框架实现的分页demo示例
May 25 #Python
Flask框架工厂函数用法实例分析
May 25 #Python
Python中Numpy mat的使用详解
May 24 #Python
Python中Numpy ndarray的使用详解
May 24 #Python
numpy数组之存取文件的实现示例
May 24 #Python
You might like
第二节 对象模型 [2]
2006/10/09 PHP
PHP编程网上资源导航
2006/10/09 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
Python实现二叉堆
2016/02/03 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
Spy++的使用方法及下载教程
2021/01/29 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
宿舍打麻将检讨书
2014/01/24 职场文书
《风筝》教学反思
2014/04/10 职场文书
大专生自荐书范文
2014/06/22 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript