Hasty Briefsbeta

双语

Ovld – Efficient and featureful multiple dispatch for Python

a year ago
  • #type-annotations
  • #python
  • #multiple-dispatch
  • ovld是一个快速的Python多重分派库,允许通过注解为不同的类型签名定义函数。
  • 与Python的singledispatch不同,它支持多参数,并包含变体、混入和函数与方法混合体等特性。
  • ovld支持依赖类型,使重载函数能基于实际值而不仅是类型进行分派。
  • 它能对函数、方法、位置参数和关键字参数进行分派,并支持高级用例的代码生成。
  • 该库特别适用于递归定义(如树形映射或序列化),通过`recurse`函数处理递归调用。
  • 可创建ovld函数的变体来定制行为,例如在递归函数中将加法改为乘法。
  • 支持为方法分配优先级,从而实现对调用的通用行为包装或调试。
  • 通过`Literal`和`Dependent`支持依赖类型,实现基于值条件的函数(如阶乘)。
  • 可用`@dependent_check`装饰器定义自定义类型,适用于PyTorch等库。
  • 通过继承`OvldBase`或使用`OvldMC`元类可实现方法的多重分派,支持子类化和方法扩展。
  • 混合体(Medleys)支持将不同类的功能组合成新类,包括数据类字段和方法合并。
  • 基准测试表明,ovld比其他多重分派库快1.5到100倍,性能显著领先。