跳转到主要内容

帮助函数包装器/装饰器实现完美前向

项目描述

GitHub Actions Status Latest Version Unlicense

为函数包装器或装饰器提供简单辅助工具,使包装函数看起来与原始函数不可区分。

安装

使用 pip

pip install funcwrap

或者,您可以将 funcwrap.py 模块或甚至 funcwrap.wrap 函数本身作为您代码或程序的一部分进行重新分发,而无需任何许可后果。

使用方法

funcwrap.wrap 与标准 functools.wraps 函数类似。然而,它在Python语法级别上返回一个与包装函数的签名完全相同的包装器。

>>> from funcwrap import wraps

>>> def func(a='Hello,', *, b='World!'):
...     pass

>>> @wraps(func)
... def wrapper(*args, **kwargs):
...     return (args, kwargs)

>>> wrapper()
(('Hello,',), {'b': 'World!'})

>>> wrapper('Bye,', b='Quentin!')
(('Bye,',), {'b': 'Quentin!'})

重要:如果您计划包装除Python函数或lambda之外的可调用对象(例如,部分函数、方法、对象),请注意结果可能令人惊讶。在使用 funcwrap 之前,请确保包装函数的行为符合预期!

为什么(或不)使用 decorator

funcwrapdecorator 模块的一个更轻量级的替代品。有许多原因可以坚持使用 decorator,也有一些原因可以尝试 funcwrap

坚持使用 decorator 的原因

  • 更经过测试和经验证,成熟的包

  • 具有不同的API,更适合编写装饰器

  • 支持生成器和协程函数

  • 支持低于3.5的Python版本

  • 等等

使用 funcwrap 的原因

  • 支持Python 3.8的 位置只参数

  • 更简单、更短的代码,如果需要,更容易理解和修改

  • 许可证:您可以将其作为代码或程序的一部分重新分发此模块,无需保留任何许可证通知

  • 具有更适合您需求的不同API(@wraps(func)@decorator

项目详情


下载文件

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

源代码发行版

funcwrap-0.0.1.tar.gz (4.3 kB 查看散列)

上传时间 源代码

构建发行版

funcwrap-0.0.1-py3-none-any.whl (3.5 kB 查看散列)

上传时间 Python 3

支持