python 递归函数_让你Python到很爽的加速递归函数的装饰器
Python技巧——好用的一个装饰器
今天我们会讲到一个装饰器。
注记:链接“装饰器”指向廖雪峰老师的Python3教程中的装饰器教程。可以在这里快速了解什么是装饰器。
`@functools.lru_cache`——进行函数执行结果备忘,显著提升递归函数执行时间。
示例:寻找宝藏。在一个嵌套元组`tuple`或列表`list`中寻找元素`'Gold Coin'`
import time
from functools import lru_cachedef find_treasure(box):for item in box:if isinstance(item, (tuple, list)):find_treasure(item)elif item == 'Gold Coin':print('Find the treasure!')return Truestart = 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 - startprint('在没有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 Truestart = 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 - startprint('在有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 2600RAM:Kingston HyperX 8Gigabytes 2666
约使用7个月。
这个装饰器可以在函数运行时记录它的输入值与运行结果。当元组('Bad Coin', 'normal coin', 'fish', 'sth', 'any sth')
出现第二次时,加了这个装饰器的函数find_the_treasure_quickly
不会再次在递归时对这个元组进行查找,而是直接在“备忘录”中找到运行结果并返回!
python 递归函数_让你Python到很爽的加速递归函数的装饰器相关推荐
- python递归函数的使用方法_让你Python到很爽的加速递归函数的装饰器
Python技巧--好用的一个装饰器 今天我们会讲到一个装饰器. 注记:链接"装饰器"指向廖雪峰老师的Python3教程中的装饰器教程.可以在这里快速了解什么是装饰器. @func ...
- python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...
https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...
- python 切片_全面解读Python高级特性切片
大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...
- python 代码_如何让Python代码加速运行?
Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足.但是,有很多时候,Python 的效率并没有想象中的那么夸张.本文对一些 Python 代码加速运行的技巧 ...
- 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集
2018年python薪资 我打算发布此收藏集 (My intention with publishing this collection) Last year I only used Medium ...
- python股市_如何使用python和破折号创建仪表板来主导股市
python股市 始终关注大局 (Keep Your Eyes on the Big Picture) I've been fascinated with the stock market since ...
- python 系统管理_实例讲解python用户管理系统
本文主要为大家分享一篇python用户管理系统的实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装 ...
- 有趣的超短python代码_有趣的python精短程序
python可以简单优美,也很有趣,下面是收集的例子: 1.一句话开始一个http的文件服务器: $ python -m SimpleHTTPServer Serving HTTP on 0.0.0. ...
- python提速_如何让Python程序轻松加速,正确方法详解
你可能在想,这很好,但这个装饰器究竟是什么?它提供对已构建的缓存的访问,该缓存使用LRU(译者注: Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久 ...
最新文章
- UML类图符号 各种关系说明以及举例
- 博客开通第一天,加油
- 电子书下载:Building Websites with DotNetNuke 5
- java.vm.info_深入理解java虚拟机
- WEB 3.0(非技术版)
- python中lines是什么类型_python里的splitlines详解
- 如何在 ASP.Net Core 中使用 Autofac
- 你可能需要了解一下的中台
- 笔记本AutoCAD启动时闪退怎么办_戴尔笔记本电脑开不了机如何解决【解决方法】...
- Linux 简单的shell实现
- h3c服务器显示非法的文件,H3C License server 故障处理手册-5W201
- 主函数中冒泡法 VS 自定义函数选择法
- linux纯没网安装mysql_实用性Linux安装mysql
- 下载在线播放的电影,一个下载TS文件的工具,python小白。
- HTTPS(一) -- 基础知识(密钥、对称加密、非对称加密、数字签名、数字证书)
- 灵感专题—2019年优秀网页设计作品赏析#4月
- 他们竟用后台数据偷窥喜欢的女性!
- java狼羊草过河_解决狼、羊、白菜过河问题的编程思路
- Kubeadm安装高可用的K8S集群--多master单node
- phd计算机考试,21校计算机Phd详细申请经验
热门文章
- 总奖金15万,双赛道同名消歧挑战赛报名进行中
- POJ - 2002 Squares 数正方形【二分】【哈希表】
- django model filter_django中探索如何提高查询数据效率
- win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?
- java 限制日期格式_Java日期格式
- word文档查重_「毕业之家」揭秘:大学生知网论文查重的规则及查重原理
- SpringMVC-获得Restful风格的参数
- 《数据库系统实训》实验报告——存储过程
- [USACO1.3]修理牛棚 Barn Repair
- android 文本左对齐,在Android中与文本左可绘制对齐