kwarg别名的实施建议

问题描述

与我一起工作的某些人已经决定,他们希望我们正在研究的库中的函数可以接受同一arg的多个名称
(这样做的动机是,人们在学术环境中使用该库会发现Unicode关键字参数直观,容易且明显正确,而非学术界的人会发现它们完全不可接受。整个想法可能不成立的原因最好不在这个问题的范围之内。)

例如:

def lambda_squared(**kwargs):
    """
    @param λ: A kwarg,which will be squared.
    @param lambda: An alias for λ. Exactly one is required,don't use both.
    @return: λ**2
    @raise ValueError: Raised if no or both kwargs are passed.
    """
    keys = ('λ','lambda')
    try:
        key = next(k for k in keys if k in kwargs)
        assert 1 == len(kwargs)
    except:
        raise ValueError('Exactly one of `λ` or `lambda` is required as a kwarg.')
    return kwargs[key]**2

将遵循此模式的许多不同功能将使用少量的args。装饰器似乎是一个好主意,这是一种可能的外观:

@alias_kwarg('lambda',as='λ')
def lambda_squared(*,λ):
    """
    @param λ: A kwarg,which will be squared.
    @return: λ**2
    """
    return λ**2

虽然我当然可以自己快速构建这样的装饰器,但我们做得越少越好。有谁知道现成的装饰器(或类似的装饰器)?是否有一种“正常”的实现方式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)