首页 > 编程语言 >funccache:革命性的Python函数缓存工具,轻松提升代码效率!

funccache:革命性的Python函数缓存工具,轻松提升代码效率!

时间:2024-07-31 17:31:43浏览次数:8  
标签:__ 缓存 funccache Python cache 返回值 Alpha

funccache

English | 中文

如其名,funccache 实现函数缓存功能,由 GQYLPY 团队研发的一个框架,可缓存某个函数或某个类中定义的所有方法的返回值。

你的程序中有一个函数会被多次调用,并且返回值不变,你会怎么做?为提高代码效率,你会先调用一次该函数并把返回值存到一个变量,之后就使用这个变量,而不是重复调用函数。是这样吗?你已经很不错了。但现在,我们要传授你一种比之更简明的方案,使用 funccache 模块直接缓存函数返回值。

funccache 有两种使用方式:当做元类使用,将缓存其元类实例中定义的所有方法的返回值;当做装饰器使用,将缓存被装饰函数的返回值。

pip3 install funccache

缓存类中方法的返回值

import funccache

class Alpha(metaclass=funccache):
    ...

此时,类 Alpha 中定义的所有方法以及property属性,在被其实例调用一次后,返回值都将被缓存,缓存在 __cache_pool__ 属性中。此后的每次调用,只要参数不变,都是直接从 __cache_pool__ 中取值,不会重复执行相关代码,大幅减少程序功耗并提高代码可读性。

上述缓存功能默认只作用于单个实例,每个实例都有自己的 __cache_pool__ 属性,若希望 Alpha 的所有实例共享同一份缓存,可启用 __shared_instance_cache__ 属性:

class Alpha(metaclass=funccache):
    __shared_instance_cache__ = True

设置类属性 __shared_instance_cache__ = True 后,属性 __cache_pool__ 将被创建在 Alpha 类中,而不是 Alpha 的每个实例中。

缓存默认永不失效,使用类属性 __ttl__ 可以设置缓存的有效时长:

class Alpha(metaclass=funccache):
    __ttl__ 60

若希望某个方法或property不被缓存,可将其加入到 __not_cache__ 列表中:

class Alpha(metaclass=funccache):
    __not_cache__ = [method_obj_or_method_name, ...]

另外,Alpha 的子类也拥有上述缓存功能。

缓存函数返回值

import funccache

@funccache
def alpha():
    ...

此时,函数 alpha 在被调用一次后,其返回值将被缓存。此后的每次调用,只要参数不变,都是直接从缓存中取值,而不会重复执行 alpha 函数。

缓存默认永不失效,若希望缓存定期失效,可以使用 funccache.ttl

@funccache.ttl(60)
def alpha():
    ...

甚至可以使用 funccache.count 按调用次数缓存:

@funccache.count(3)
def alpha():
    ...

装饰器的用法亦可获得单例类,只要实例化参数一致:

@funccache
class Alpha:
    ...

标签:__,缓存,funccache,Python,cache,返回值,Alpha
From: https://www.cnblogs.com/zyk01/p/18335068

相关文章

  • Python - Functional programming
    Functionalprogrammingisaprogrammingparadigminwhichmostoftheworkinaprogramisdoneusingpurefunctions.Apurefunctionisafunctionwithoutanysideeffects;itsreturnvalueisalwaysdeterminedbyitsinputarguments,soitalwaysreturn......
  • Python - Lambda expressions as closures
    Aclosureisanestedfunctionthatcanaccessfreevariablesfromanenclosingfunctionevenafterithasfinisheditsexecution.Weknowthat,likenestedfunctiondefinitions,lambdaexpressionscanreferencevaluesfromtheenclosingscope,solambda......
  • Python - Creating jump tables using lambda functions
    Wecanplacelambdafunctioninsidelistanddictionaryliterals.Thiswaywecanuselambdaexpressionstocreatejumptables.>>>L=[lambdas:s.strip().lower(),... lambdas:s.strip().upper(),... lambdas:s.lstrip().title(),... lambd......
  • exceptionx:灵活便捷的Python异常处理库,让异常处理更高效!
    exceptionxEnglish|中文exceptionx是一个灵活且便捷的Python异常处理库,允许你动态创建异常类,并提供多种异常处理机制。exceptionx的前身是gqylpy-exception。pip3installexceptionx动态创建异常使用exceptionx,你可以在需要时即时创建异常类,而无需提前定义。例如,如......
  • systempath:Python开发者必备的文件与系统路径操作神器!
    systempath-专业级的文件与系统路径操作库English|中文systempath是一个专为Python开发者设计的,高度专业化的文件与系统路径操作库。通过提供一套直观且功能强大的面向对象API,它极大地简化了复杂文件与目录管理的任务,使开发者能够更专注于核心业务逻辑的实现,而非底层文件系......
  • 用Python打造精彩动画与视频,3.3 添加音频和简单效果
     3.3添加音频和简单效果在本节中,我们将学习如何使用MoviePy库为视频添加音频和一些简单的效果。这些操作可以让你的视频更具吸引力和个性化。准备工作首先,确保你已经安装了MoviePy和pydub库。你可以通过以下命令安装:pipinstallmoviepypydub同时,你需要确保系统......
  • 用Python打造精彩动画与视频,3.2 基本的剪辑和合并操作
     3.2基本的剪辑和合并操作在这一节中,我们将学习如何使用MoviePy库对视频进行基本的剪辑和合并操作。MoviePy是一个用于视频编辑的Python库,可以轻松地实现视频的剪辑、合并、添加音频等操作。准备工作首先,确保你已经安装了MoviePy库。你可以通过以下命令安装:pipins......
  • 计算机毕业设计django/flask导师双选指导系统python+vue
    通过分析企业对于本科生导师指导平台的需求,创建了一个计算机管理本科生导师指导平台的方案。文章介绍了本科生导师指导平台的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 Python版本:python3.7+前端:vue.js+elementui框架:django/flask都......
  • 农产品商城自主供销服务系统 微信小程序-python+uniapp
    小程序端运行软件 微信开发者工具/hbuiderxuni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。农产品供销系统是基于微信小程序开发,本系统分为用户,管理员,商家三个角色;用户功能是注册登陆后,在线购买商品,加入购物车,生成订单,在线咨......
  • VSCode:Python 虚拟环境未在集成终端中自动激活
    我最近安装了VSCode,并注意到当我打开集成终端时,Python虚拟环境不会自动激活。从此链接中VSCode内提供的信息:https://github.com/microsoft/vscode-python/wiki/Activate-Environments-in-Terminal-Using-Environment-Variables看来Python扩展可能不会对......