跳转到主要内容

Python装饰器的Zoo

项目描述

Ruff

Deczoo

装饰器的动物园

有许多出色的装饰器我们在日常生活中经常使用。为什么不尽收集一些呢?

我发现自己不断地在不同的项目中实现。希望在这里收集它们并使用这个代码库。


文档 | 源代码


Alpha通知

这个代码库是实验性的,并且适用于我的用例。很可能存在一些它没有覆盖并且会崩溃的情况。如果您发现它们,请随时在问题页面上打开一个问题。

什么是装饰器?

简而言之,Python装饰器是一种在不实际修改函数或类的源代码的情况下,修改或增强函数或类行为的方法。

装饰器作为函数(或类)实现,这些函数(或类)接受一个函数或类作为输入,并返回一个具有附加功能的新函数或类。

要获取更深入的说明,您可以查看装饰器文档部分

安装

deczoo 作为Python包发布在pypi上,可以使用pip安装,也可以使用git直接从源安装,或者通过本地克隆

  • pip(建议)

    python -m pip install deczoo
    
  • pip + 源/git:

    python -m pip install git+https://github.com/FBruzzesi/deczoo.git
    
  • 本地克隆:

    git clone https://github.com/FBruzzesi/deczoo.git
    cd deczoo
    python -m pip install .
    

依赖关系

截至目前,该库没有其他必需的依赖项,但是

  • 一些功能仅在UNIX系统上工作(@memory_limit和@timeout)
  • 使用一些装饰器可能需要安装额外的依赖项(例如,安装 chime 以使用 @chime_on_end

入门指南

这个想法相当简单:库中的每个函数都是一个具有特定目标的(函数)装饰器。

from deczoo import log

@log # equivalent to @log(log_time=True, log_args=True, log_error=True, logging_fn=print)
def custom_add(a, b, *args):
    """Adds all arguments together"""
    return sum([a, b, *args])

_ = custom_add(1, 2, 3, 4)
# custom_add args=(a=1, b=2, args=(3, 4)) time=0:00:00.000062

 _ = custom_add(1, "a", 2)
# custom_add args=(a=1, b=a, args=(2,)) time=0:00:00.000064 Failed with error: unsupported
# operand type(s) for +: 'int' and 'str'
from deczoo import shape_tracker

@shape_tracker(shape_in=True, shape_out=True, shape_delta=True, raise_if_empty=True)
def tracked_vstack(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    return np.vstack([a, b])

_ = tracked_vstack(np.ones((1, 2)), np.ones((10, 2)))
# Input: `a` has shape (1, 2)
# Output: result has shape (11, 2)
# Shape delta: (-10, 0)

功能

该库实现了以下装饰器

  • call_counter:跟踪函数被调用的次数。
  • catch:在 try-except 块中包装函数,返回自定义值或引发自定义异常。
  • check_args:检查函数参数是否满足其“规则”。
  • chime_on_end:在函数结束时(成功或错误)发出鸣响通知。
  • log:跟踪函数耗时、参数和错误,此类日志可以写入文件。
  • timer:跟踪函数耗时。
  • memory_limit:在运行函数时设置内存限制。
  • notify_on_end:使用自定义通知器在函数运行完毕时进行通知。
  • raise_if:如果满足条件则引发自定义异常。
  • retry:使用“retry”块包装函数。
  • shape_tracker:跟踪输入和/或输出中的 dataframe/类似数组对象的形状。
  • multi_shape_tracker:跟踪函数输入和/或输出的形状。
  • timeout:为函数设置时间限制,如果在指定时间限制内未完成则终止进程。

示例

请参阅API 页面,以查看每个装饰器的基本示例。

贡献

请阅读文档网站中的贡献指南

许可证

该项目采用MIT 许可证

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分布

deczoo-0.6.0.tar.gz (560.4 kB 查看哈希)

上传时间 源代码

构建分布

deczoo-0.6.0-py3-none-any.whl (14.2 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面