thi*_*ybk 2 python generic-function single-dispatch python-2.7
我想根据传递给“调度”函数(例如使用)的参数的数据类型来调度 Python 函数(例如使用dict 方法isinstance())。是否有实施替代方案?最简单的方法是什么?
从 Python 3.4 开始,Python 标准库包括对@singledispatch()泛型函数的支持。
这使您可以注册多个函数来处理不同的类型,并且它将处理基于类型的调度,包括子类测试和缓存。该方法在PEP 443 - Single-dispatch generic functions 中描述。
PyPI 上有一个支持 Python 2.6 及更高版本的backport,由 PEP 作者编写。
请注意,Python 2.7 很快将迎来最后的生命周期终止日期,届时它将不再收到错误修复和安全更新;您确实需要尽快计划升级到 Python 3。当您这样做时,您会注意到 Python 3.7 版本支持使用类型提示来记录每个函数接受的类型。
例如,一系列用于从嵌套字典和列表数据结构(典型的 JSON 数据结构)中删除None和False取值的函数,可以定义为:
from functools import singledispatch
@singledispatch
def remove_null_false(ob):
return ob
@remove_null_false.register
def _process_list(ob: list):
return [remove_null_false(v) for v in ob]
@remove_null_false.register
def _process_list(ob: dict):
return {k: remove_null_false(v) for k, v in ob.items()
if v is not None and v is not True and v is not False}
Run Code Online (Sandbox Code Playgroud)
在 Python 版本 < 3.7 中,您必须将类型移动到@remove_null_false.register(...)装饰器工厂表示法。
| 归档时间: |
|
| 查看次数: |
1770 次 |
| 最近记录: |