跳转到主要内容

简单的可调用参数检查和过滤

项目描述

Project Status: Active — The project has reached a stable, usable state and is being actively developed. CI Status https://codecov.io/gh/jwodder/argset/branch/master/graph/badge.svg https://img.shields.io/pypi/pyversions/argset.svg MIT License

GitHub | PyPI | 问题

argset 提供了一个简单的接口,用于确定一个可调用对象是否接受具有给定名称的参数,过滤一个可能的参数 dict,使其仅包含可调用对象接受的参数,并确定从可能的参数 dict 中缺失的任何必需参数。

安装

argset 需要 Python 3.6 或更高版本。只需使用 Python 3 的 pip 安装 argset 及其依赖项即可(你有 pip,对吧?)

python3 -m pip install argset

示例

检查函数的参数

>>> from argset import argset
>>> def my_func(foo, bar):
...     print(f"foo={foo!r}")
...     print(f"bar={bar!r}")
...
>>> a = argset(my_func)
>>> "foo" in a
True
>>> "quux" in a
False

过滤一组参数,仅保留函数接受的参数

>>> a.select({"foo": 42, "bar": 23, "quux": 17})
{'foo': 42, 'bar': 23}
>>> my_func(**a.select({"foo": 42, "bar": 23, "quux": 17}))
foo=42
bar=23

与上述相同,但现在函数接受 **kwargs

>>> from argset import argset
>>> def my_func2(foo, **kwargs):
...     print(f"foo={foo!r}")
...     for k, v in kwargs.items():
...          print(f"{k}={v!r}")
...
>>> a2 = argset(my_func2)
>>> "foo" in a2
True
>>> "quux" in a2
True
>>> a2.select({"foo": 42, "bar": 23, "quux": 17})
{'foo': 42, 'bar': 23, 'quux': 17}
>>> my_func2(**a2.select({"foo": 42, "bar": 23, "quux": 17}))
foo=42
bar=23
quux=17

API

argset(func: Callable) -> ArgSet

检查一个可调用对象,并返回其参数的摘要作为一个 ArgSet

class ArgSet

一个表示可调用参数的表示。它具有以下属性和特性

required_positional_only: int

只有位置参数且没有默认值的参数数量

optional_positional_only: int

只有位置参数且有默认值的参数数量

positional_only: int

所有位置参数的总数

required_args: frozenset[str]

所有没有默认值的位参数或关键字参数的名称

optional_args: frozenset[str]

所有有默认值的位参数或关键字参数的名称

argnames: frozenset[str]

所有位参数或关键字参数的名称

takes_args: bool

可调用是否有形式为*args的参数

takes_kwargs: bool

可调用是否有形式为**kwargs的参数

ArgSet对象支持in操作符;形式为argname in a的表达式在argnamea.argnames中或a.takes_kwargsTrue时返回True

ArgSet对象具有以下方法

ArgSet.select(kwargs: Dict[str, Any]) -> Dict[str, Any]

返回所有在kwargs中且键为可调用接受的位参数或关键字参数的项。如果takes_kwargsTrue,则返回值是kwargs的副本。

ArgSet.missing(kwargs: Dict[str, Any]) -> FrozenSet[str]

返回所有在required_args中但不在kwargs中出现的键

项目详情


下载文件

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

源分发

argset-0.1.0.tar.gz (6.6 kB 查看哈希值)

上传时间

构建分发

argset-0.1.0-py3-none-any.whl (5.2 kB 查看哈希值)

上传时间 Python 3

支持者

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