Python装饰器的Zoo
项目描述
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 查看哈希)
关闭
deczoo-0.6.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9acbec6a9410c72699cd02ed3b7c59ad5c0430f1ede07a574f905c00e7df3715 |
|
MD5 | b0773e0b6c6154c0a415442ce68e3866 |
|
BLAKE2b-256 | 93b97ed586cb3cb0d56d80abbb5c273a8dcf7e3c02f2da239e479f0401fb2929 |
关闭
deczoo-0.6.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d9a691aa41541626e4d7761ed27560f5f0ff6df37f58be3ebea229a3c8929fef |
|
MD5 | a2bb25bc085850da637e9b450077814d |
|
BLAKE2b-256 | bc8dd71a9ab6377c4588335f31f24df618b518c1521ef7267f47e857c571fe23 |