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到很爽的加速递归函数的装饰器相关推荐

  1. python递归函数的使用方法_让你Python到很爽的加速递归函数的装饰器

    Python技巧--好用的一个装饰器 今天我们会讲到一个装饰器. 注记:链接"装饰器"指向廖雪峰老师的Python3教程中的装饰器教程.可以在这里快速了解什么是装饰器. @func ...

  2. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  3. python 切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

  4. python 代码_如何让Python代码加速运行?

    Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足.但是,有很多时候,Python 的效率并没有想象中的那么夸张.本文对一些 Python 代码加速运行的技巧 ...

  5. 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集

    2018年python薪资 我打算发布此收藏集 (My intention with publishing this collection) Last year I only used Medium ...

  6. python股市_如何使用python和破折号创建仪表板来主导股市

    python股市 始终关注大局 (Keep Your Eyes on the Big Picture) I've been fascinated with the stock market since ...

  7. python 系统管理_实例讲解python用户管理系统

    本文主要为大家分享一篇python用户管理系统的实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装 ...

  8. 有趣的超短python代码_有趣的python精短程序

    python可以简单优美,也很有趣,下面是收集的例子: 1.一句话开始一个http的文件服务器: $ python -m SimpleHTTPServer Serving HTTP on 0.0.0. ...

  9. python提速_如何让Python程序轻松加速,正确方法详解

    你可能在想,这很好,但这个装饰器究竟是什么?它提供对已构建的缓存的访问,该缓存使用LRU(译者注: Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久 ...

最新文章

  1. UML类图符号 各种关系说明以及举例
  2. 博客开通第一天,加油
  3. 电子书下载:Building Websites with DotNetNuke 5
  4. java.vm.info_深入理解java虚拟机
  5. WEB 3.0(非技术版)
  6. python中lines是什么类型_python里的splitlines详解
  7. 如何在 ASP.Net Core 中使用 Autofac
  8. 你可能需要了解一下的中台
  9. 笔记本AutoCAD启动时闪退怎么办_戴尔笔记本电脑开不了机如何解决【解决方法】...
  10. Linux 简单的shell实现
  11. h3c服务器显示非法的文件,H3C License server 故障处理手册-5W201
  12. 主函数中冒泡法 VS 自定义函数选择法
  13. linux纯没网安装mysql_实用性Linux安装mysql
  14. 下载在线播放的电影,一个下载TS文件的工具,python小白。
  15. HTTPS(一) -- 基础知识(密钥、对称加密、非对称加密、数字签名、数字证书)
  16. 灵感专题—2019年优秀网页设计作品赏析#4月
  17. 他们竟用后台数据偷窥喜欢的女性!
  18. java狼羊草过河_解决狼、羊、白菜过河问题的编程思路
  19. Kubeadm安装高可用的K8S集群--多master单node
  20. phd计算机考试,21校计算机Phd详细申请经验

热门文章

  1. 总奖金15万,双赛道同名消歧挑战赛报名进行中
  2. POJ - 2002 Squares 数正方形【二分】【哈希表】
  3. django model filter_django中探索如何提高查询数据效率
  4. win7设置自动开机时间_电脑可以设置自动开机时间,您知道吗?
  5. java 限制日期格式_Java日期格式
  6. word文档查重_「毕业之家」揭秘:大学生知网论文查重的规则及查重原理
  7. SpringMVC-获得Restful风格的参数
  8. 《数据库系统实训》实验报告——存储过程
  9. [USACO1.3]修理牛棚 Barn Repair
  10. android 文本左对齐,在Android中与文本左可绘制对齐